Hasmany与laravel 5.5中的孩子的孩子

时间:2018-06-24 16:02:29

标签: laravel

我有3张桌子。

  1. 商店
  2. shop_foods
  3. 食物

与shop_food和store创建hasmany关系时,我需要获取food表数据。

$this->hasMany('App\Diet\ShopFood', 'shop_id', 'id');

3 个答案:

答案 0 :(得分:1)

请显示您的代码,以便我们知道您要做什么。 但是我在这里看到的是您的关系有误。

为什么要在多对多关系中分配hasMany?

在您的商店模型中,您可以通过以下方式建立食物关系:

$this->belongsToMany('App\Diet\Food);

然后您可以在打电话时收拾食物

$shop->foods

还有具有Pivot属性的shop_foods

答案 1 :(得分:1)

如果我正确理解,您想在致电foods时得到shops->shop_foods。那是不是

//first you call your shops as you want.
Shop::with(['shops_food' => function($query){
    //the 'shops_food' relationship should be called within an array
    //this way you could query the relationship as the eloquent model.
    //that way you could call the 'foods' relationship inside the shops_food relationship.
    $query->with('foods')
}])
...

请注意,您必须具有在shop和shop_foods模型中声明的关系

让您的模型像这样

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Shop extends Model
{
    //
    public function shops_food()
    {
        //shop_id is the foreing key inside your shop_foods table
        return $this->hasMany('App\ShopFood','shop_id');
    }
    ....
 }

然后选择ShopFood模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ShopFood extends Model
{
    //
    public function foods()
    {
        //shop_food_id is the foreing key inside your foods table
        return $this->hasMany('App\Food','shop_food_id');
    }
    ....
 }

答案 2 :(得分:1)

这看起来像是您想要的

public function foods() {
    $this->hasMany('App\Diet\Food');
}

在您的ShopFood模型和您的Shop模型中

public function shopfoods() {
    $this->hasMany('App\Diet\ShopFood')->with('foods');
}

您还可以在Shop模型中建立2个独立的关系:

public function shopfoods() {
    $this->hasMany('App\Diet\ShopFood');
}
public function shopfoodsWithFoods() {
    $this->hasMany('App\Diet\ShopFood')->with('foods');
}

这样,您可以随时使用所需的任何东西。

但是整个事情还不清楚…… 我什至不知道3表如何连接,所以hasMany只是猜测。 不过,您可以只使用“ with”功能。

PS 还有可能只是声明

protected $with = ['foods'];
在ShopFood模型中,如果您始终希望连接这2个。全部在文档中。