欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

associate 的使用 保存 belongsTo 关联对象 Can't get Laravel associate to work 一对一 多对一 一对多 有大用 有大大用

一对一 一对多 多对一 多对多 的保存 可以查看 /node-admin/6976 有大用

一对多保存宁皓网的两种方法

Movie 是主表,,,,Review是副表

public function store($movie_id)

{

$review = new Review;

$review->review_content = Input::get('review_content');

下面是第一种保存的方法

//$review->movie_id = $movie_id;

//$review->save();    


下面是第二种保存的方法

    Movie::find($movie_id)->reviews()->save($review);

    return Redirect::to('movies/' . $movie_id);

}




Can't get Laravel associate to work

不能让Laravel的助理工作

我不太清楚我是否理解了拉里维尔的联想法。我理解这个想法,但我似乎无法让它工作。

用这个(蒸馏)代码:

class User          //这是主表
{

    public function customer()
    {
        return $this->hasOne('Customer');
    }

}

class Customer  //这是副表
{

    public function user()
    {
        return $this->belongsTo('User');
    }

}

$user = new User($data);
$customer = new Customer($customerData);

$user->customer()->associate($customer); //这个是错的

Call to undefined method Illuminate\Database\Query\Builder::associate()当我尝试运行它时,我得到一个

从我可以看到的,我完全按照文档中的说明做。

我究竟做错了什么?

还有一点千万要注意 

     public function user()

    {
        return $this->belongsTo('User','user_id','user_id');//如果后面第二个第三个参数,不是规定的格式,要补上.
                          //规定的格式是 第二个参数规定的要式是对应的  去掉复数s的主表名_id (附加表的外键) 
                          //规定的格式是 第三个参数规定的要式是对应的  id   (主表的主键)

    }


正确答案
 

我必须承认,当我使用Laravel的关系,第一个开始的地方,我不得不一直向后引用文档的,甚至然后在某些情况下,我并没有完全得到正确的部分。

为了帮助您,associate()用于更新belongsTo()关系。看看你的代码,返回的类$user->customer()是一个hasOne关系类,不会有关联方法。

如果你要这样做的话。

$user = new User($data);
$customer = new Customer($customerData);

$customer->user()->associate($user);
$customer->save();  //这个是对的  $user是主表 ,customer是副表

它将像$customer->user()一个belongsTo关系一样工作

要做到这一点,另一种方式将首先保存用户模型,然后将客户模型保存为:

$user = new User($data);
$user->save();

$customer = new Customer($customerData);
$user->customer()->save($customer);//这个是对的 $user是主表 ,customer是副表,

编辑:可能没有必要先保存用户模型,但我一直都这么做,不知道为什么。

 

Post与comment是一对多的关系
$comment = new App\Comment(['message' => 'A new comment.']);

$post = App\Post::find(1);

$post->comments()->save($comment);

 

//下面的内容可以不看 

 
 
   
是的,你的第一件事情似乎正常工作。我认为这样做有点奇怪。Anyhoe,谢谢。所以你可以学习一些新的东西:$ user-> push(); 保存用户和所有的关系。 -  Matthijn Oct 2 '14 at 12:55
   
很高兴认识,谢谢Matthijn -  David Barker 10月6日,14日,7:35

据我所知,->associate()可以在一个BelongsTo关系上呼吁。所以,在你的例子中,你可以做到$customer->user()->associate($user)但是,为了“联系”您使用的一个Has *关系->save(),所以你的代码应该是$user->customer()->save($customer)

分享改善这个答案
 
   
有同样的问题。但是关于belongsToMany()关系。我该怎么解决这个问题?谢谢 -  aleXela 11月29日16日21:30
   
对于多对多方法(请参阅docs laravel.com/docs/5.3/...)您使用->attach()->detach()。例如$post->tags()->attach($tag);现在,正式地,attach和detach方法只接受ID,但是当我之前在4.x上测试过的时候,你可以传递实际的模型,这可能会改变为5.x。 -  alexrussell Dec 1 '16 at 9:57
   
这种工作。但它要求一个数组,而我正在获得对象。 -  aleXela Dec 1 '16 at 21:18
   
我认为这里最好的做法是提出一个特定于你问题的新问题。包括你正在使用的Laravel的版本和任何相关的代码,我相信你会得到你需要的帮助。 -  alexrussell Dec 5 '16 at 14:25

来自  http://stackoverflow.com/questions/26160661/cant-get-laravel-associate-to-work

普通分类: