首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >laravel中的Associate()

laravel中的Associate()
EN

Stack Overflow用户
提问于 2018-04-09 10:56:35
回答 2查看 7.5K关注 0票数 2

我有两个模型,一个用户和一个地址。我仍然在试验associate(),因为我是在https://laravel.com/docs/5.6/eloquent-relationships#updating-belongs-to-relationships中读到它的,但是我在实现它时遇到了一些问题,不幸的是,我的视频教程没有介绍associate()函数。

代码语言:javascript
复制
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的新手,所以是的..

EN

回答 2

Stack Overflow用户

发布于 2018-04-09 12:30:30

您仍然需要对对象执行save操作来存储值。

正如documentation所说:

属于关系

在更新关联关系时,您可以使用belongsTo方法。此方法将在子模型上设置外键:

$account = App\Account::find(10);$user->account()->associate($account);$user->save();

因此,正如您所看到的,完成此操作后:

代码语言:javascript
复制
$address->user()->associate($user);

您需要这样做:

代码语言:javascript
复制
$address->save();
票数 1
EN

Stack Overflow用户

发布于 2018-04-09 11:16:30

您的地址模型需要具有belongsTo用户关系。例如:

代码语言:javascript
复制
class Address extends Model
    public function user() {
        return $this->belongsTo('App\User');
    }
}

注意:您需要确保具有外键约束

例如迁移:

代码语言:javascript
复制
Schema::table('addresses', function (Blueprint $table) {
    $table->unsignedInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49724941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档