Laravel Eloquent ORM很多很多关系并不适合加入其他桌面?

时间:2017-05-12 07:22:20

标签: php mysql laravel eloquent

这里我有这些表

table 1 => shops 
           -------------
           id | name
table 2 => menus
          -------
           id | name | category_id 

 table 3 (pivot table) => menu_shop 
                         ---------
                        id | menu_id | shop_id
table 4 => categories 
           ----------
            id | name

我想获得具有特定类别名称的菜单和商店,然后我的查询就在这里

  

$ menus = Menu :: with(' shops') - > leftJoin(' categories',' menus.category_id',' = #&39;,' categories.id')                - 化合物其中(' categories.name',' =''中国')                - >取(6) - >得到();

然后我在刀片中显示

 @foreach($menus as $chinesemenu)

                    <div class="col-md-6 col-sm-12">

                        <div class="menu">
                            <img src="{{ '/images/menus/'. $chinesemenu->image }}" class="menuimg">
                            <p class="menutitle">{{$chinesemenu->title}} - <span class="menuprice">{{$chinesemenu->price}} Ks</span>
                                <a data-id="{{$chinesemenu->id}}" data-name="{{$chinesemenu->title}}" data-toggle="modal" data-target="#modalEdit" class="homeorder" ><i class="mdi mdi-cart"></i> </a>
                            </p>
                            <p class='menudescription'>
                                {{$chinesemenu->description}}

                            </p>
                            <span class="menushop">
                                    @foreach($chinesemenu->shops as $shop)
                                    {{$shop->name}}
                                     @endforeach
                                </span>
                        </div>

                    </div>
                @endforeach

一切都很好,除了我在加入类别表后只从{{$ shop-&gt; name}}获得一个商店,但它有两个商店。

但是当我将查询更改为此

$menus =Menu::with('shops')->take(6)->get();

我得到了正确的输出。但我必须加入类别表。帮助!

1 个答案:

答案 0 :(得分:2)

一样进行查询
$menus = Menu::with('shops', 'category')->whereHas('category', function ($query) {
    return $query->where('name', '=', 'Chinese');
})->take(6)->get();

你需要菜单中的关系

public function category()
{
    return $this->belongsTo(Category::class)
}

现在你应该只获得名为“Chinese”的菜单。 :)

Laravel docs