У меня есть 2 модели, пользователь и адрес. Я все еще экспериментирую с associate (), так как прочитал ее в https://laravel.com/docs/5.6/eloquent-relationships#updating-belongs-to-relationships, но у меня возникли проблемы с ее реализацией, и, к сожалению, мой видеоурок не охватывает функцию associate ().
class User extends Authenticatable
public function address(){
return $this->hasOne('App\Address');
}
class Address extends Model
public function user(){
return $this->belongsTo('App\User');
}
--web.php--
Route::get('/sample',function(){
$user = User::create(['name'=>'user 1','email'=>'[email protected]',password='']);
$address = Address::create(['name'=>'sample address of user 1']);
$address->user()->associate($user);
});
Все было сохранено, но я ожидал, что user_id адреса будет 1. Вместо этого user_id адреса был установлен в NULL. Разве функция associate () не предполагает связывание определенной модели «ownTo» с ее родительским элементом путем автоматического присвоения внешнего ключа, равного идентификатору родительского элемента? Кстати, я новичок в PHP и Laravel, так что да ...
Возможный дубликат Не могу заставить сотрудника Laravel работать






Ваша модель адреса должна иметь отношение ownTo User. например:
class Address extends Model
public function user() {
return $this->belongsTo('App\User');
}
}
Примечание: вам нужно убедиться, что у вас есть ограничение внешнего ключа
например, миграция:
Schema::table('addresses', function (Blueprint $table) {
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});
Он уже имеет отношение BelongsTo, это было указано выше .. У меня только что была опечатка, когда я писал здесь код .. извините
Извините, я не вижу, где у вас есть отношения пользователя в вашей модели адреса.
Повторно отредактировал код в этом посте. Еще одна опечатка, когда я писал здесь код.
@JpArcilla, CUGReen прав, модель Address не имеет функции user (), и в вашем веб-файле вы пытаетесь получить к нему доступ
Вы установили ограничения внешнего ключа в своей миграции / базе данных?
Вам все еще нужно save объект для хранения значения.
Как сказано в документация:
Belongs To Relationships
When updating a belongsTo relationship, you may use the associate method. This method will set the foreign key on the child model:
$account = App\Account::find(10); $user->account()->associate($account); $user->save();
Итак, как видите, после этого:
$address->user()->associate($user);
вам нужно сделать это:
$address->save();
Привет! Попробуй потом добавить
$address->save();