如何在laravel中创建3个模型之间的关系?

SQL 方案:


公告


  id increment

交易


  id increment

  seller_id

  buyer_id

Deals_items - 项目 = 公告


  id increment

  title

  desc

  bulletin_id

  deal_id

如何通过公告 ID 获取交易行?在原始 SQL 中,它看起来像:


select `deals`.* from `deals` inner join `deals_items` on `deals_items`.`deal_id` = `deals`.`id` where `deals_items`.`bulletin_id` = 10572

我试过了:


public function deals()

{

    return $this->hasManyThrough(DealItem::class,Deal::class, 'bulletin_id','dealid','id');

}

但这似乎是一种错误的方式。在 Laravel 文档中找不到关于关系的正确方法。


@HCK 显示正确的方式。


但是当我在刀片模板中执行 $bulletin->deals() 时,我得到了空的交易集合。


当只是 $bulletin->deal - 一切都很好时,我们有交易的集合。


我在公告模型中使用了受保护的 $with = ['deals'],但有什么不同的调用方法或属性?为什么方法为空结果?


偶然的你
浏览 125回答 3
3回答

慕码人2483693

试试这个:交易.phppublic function bulletins(){&nbsp; &nbsp; return $this&nbsp; &nbsp; &nbsp; &nbsp; ->belongsToMany(Bulletin::class, 'deals_items', 'deal_id', 'bulletin_id')&nbsp; &nbsp; &nbsp; &nbsp; ->withPivot('title','desc');}公告.phppublic function deals(){&nbsp; &nbsp; return $this&nbsp; &nbsp; &nbsp; &nbsp; ->belongsToMany(Deal::class, 'deals_items', 'bulletin_id', 'deal_id')&nbsp; &nbsp; &nbsp; &nbsp; ->withPivot('title','desc');}从文档:如前所述,为了确定关系连接表的表名,Eloquent 将按字母顺序连接两个相关模型名称。但是,您可以随意覆盖此约定。您可以通过向该belongsToMany方法传递第二个参数来实现 :return $this->belongsToMany('App\Role', 'role_user');除了自定义连接表的名称之外,您还可以通过向belongsToMany方法传递附加参数来自定义表上键的列名。第三个参数是您在其上定义关系的模型的外键名称,而第四个参数是您要加入的模型的外键名称:return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');更新当您将关系作为方法$bulletin->deals()访问时:您正在访问关系本身。这将返回\Illuminate\Database\Eloquent\Relations\BelongsToMany(在您的情况下)的实例。此处查询尚未执行,因此您可以继续向查询添加约束,例如:$bulletin&nbsp; &nbsp; ->deals()&nbsp; &nbsp; ->where('seller_id', 45) // <---&nbsp; &nbsp; ->skip(5) // <---&nbsp; &nbsp; -> ... (And so on)当您将其作为动态属性访问时,您已经在执行查询,因此这将返回一个Collection实例。与将关系作为方法调用然后->get()在末尾附加,所以这两个是等价的:$bulletin->deals()->get()// equals to:$bulletin->deals检查这个其他答案,它回答了你的问题。

智慧大石

交易等级:public function bulletins()&nbsp; &nbsp; return $this->belongsToMany('App\Bulletin', 'deals_items ', 'bulletin_id', 'deal_id')->withPivot('title','desc');}公告类:public function deals()&nbsp; &nbsp; return $this->belongsToMany('App\Deal', 'deals_items ', 'deal_id', 'bulletin_id')->withPivot('title','desc');}

繁华开满天机

交易模式 -public function bulletins()&nbsp; &nbsp; return $this->belongsToMany(Bulletin::class, 'deals_items ', 'bulletin_id', 'deal_id');}公告模式:-public function deals(){&nbsp; &nbsp; return $this&nbsp; &nbsp; &nbsp; &nbsp; ->belongsToMany(Deal::class, 'deals_items',&nbsp; 'deal_id', 'bulletin_id',);}
打开App,查看更多内容
随时随地看视频慕课网APP