gpt4 book ai didi

php - Laravel Eloquent ORM 多对多关系不适用于与其他表的连接?

转载 作者:行者123 更新时间:2023-11-29 06:02:28 25 4
gpt4 key购买 nike

我这里有这些表

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','=','categories.id') ->where('categories.name','=','Chinese') ->take(6)->get();

然后我在 Blade 中显示

 @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->name}} 得到一家商店,但它有两家商店。

但是当我将查询更改为此

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

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

最佳答案

像这样查询

$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

关于php - Laravel Eloquent ORM 多对多关系不适用于与其他表的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com