laravel 中的 Associate()
Posted
技术标签:
【中文标题】laravel 中的 Associate()【英文标题】:Associate() in laravel 【发布时间】:2018-09-18 09:06:47 【问题描述】:我有 2 个模型,一个用户和一个地址。自从我在https://laravel.com/docs/5.6/eloquent-relationships#updating-belongs-to-relationships 中读到它之后,我仍在对 associate() 进行试验,但我在实现它时遇到了一些麻烦,遗憾的是我的视频教程没有涵盖 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'=>'user@laravel.com',password='']);
$address = Address::create(['name'=>'sample address of user 1']);
$address->user()->associate($user);
);
一切都保存了,但我希望地址的 user_id 为 1。相反,地址的 user_id 设置为 NULL。 associate() 不是假设通过自动分配等于父 ID 的外键来将特定的“belongsTo”模型链接到其父模型吗?顺便说一句,我对 PHP 和 Laravel 很陌生,所以是的..
【问题讨论】:
嗨!之后尝试添加$address->save();
Can't get Laravel associate to work的可能重复
【参考方案1】:
你仍然需要save
对象来存储值。
正如documentation 所说:
属于关系
当更新一个 belongsTo 关系时,你可以使用 associate 方法。此方法将在子模型上设置外键:
$account = App\Account::find(10); $user->account()->associate($account); $user->save();
所以,如你所见,在关联之后:
$address->user()->associate($user);
你需要保存它:
$address->save();
【讨论】:
【参考方案2】:您的 Address 模型需要有一个 belongsTo 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() 函数,并且在您的 Web 文件中您正在尝试访问它 您是否在迁移/数据库中设置了外键约束?以上是关于laravel 中的 Associate()的主要内容,如果未能解决你的问题,请参考以下文章
laravel5.1 关联模型保存的方法(使用associate方法)