从一个表中仅选择另一个表中存在的记录

时间:2018-11-17 18:33:10

标签: php scope relationship octobercms

我正在使用October CMS为一家餐馆建立网站,并且正在使用菜单页面。

我有两个表“ Sections”和“ Menu Items”。部分可以有许多菜单项,但是菜单项只能有一个部分。

我要创建一个范围,以便如果某个Section不包含任何菜单项,则不会返回它。这样一来,我的页面上就没有任何空白的标题了。

我已经建立了我的关系。

部分模型

public $hasMany = [

    'menuitems' => ['elnorteno2\restaurantmenu\Models\MenuItem', 'key' => 'section_id']

];

菜单项模型

public $belongsTo = [

    'section' => 'elnorteno2\restaurantmenu\Models\Section'

];

我只是不知道将Sections模型用于范围定义。

public function scopeSections($query)
{
     ??????
} 

我到处都看过了,似乎无法用Google搜索正确的内容。

我将感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

您的意思是只想要2个具有相同键或ID的表中存在的数据?

然后是的,您可以使用联接查询来完成。让我给你一个我以前用过的例子。

示例

table_A有 ID名称电子邮件密码

table_B有 id user_id order_no total

查询

SELECT table_A.id, table_A.name FROM table_A INNER JOIN table_B ON table_A.id = table_B.user_id;

快乐的编码...

答案 1 :(得分:0)

您可以这样写

public function scopeSections($query)
{
    return $query->has('menuitems');
} 
  

也许是更好的名字scopeHavingSubmenu

如有疑问,请发表评论