首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 5,左联接返回连接右侧的所有项。

Laravel 5,左联接返回连接右侧的所有项。
EN

Stack Overflow用户
提问于 2016-09-09 18:42:04
回答 3查看 1.5K关注 0票数 2

我有三个表:"items“、"faq”和一个连接表:"item_faq“。item_faq表保存关系以及一个订单列,以帮助每个项目订购常见问题。

目前数据库中共有5个常见问题。item_faq表中共有9行将这5个常见问题与多个项相关联。

上下文是管理员可以创建/编辑一个项目,并选择将包含哪些常见问题,以及它们的顺序。

在item admin create/edit视图上,我需要显示所有常见问题,并且能够选中我想要包含的那些faqs。

在我的控制器中,我正在做这样的左连接:

代码语言:javascript
运行
复制
$faqs = \App\Faq::leftJoin('item_faq', 'faq.id', '=', 'item_faq.faq_id')->get();

我是dd($faqs)来测试返回的内容,我得到了9个对象。这就是我的问题所在:我需要它返回5个常见问题,如果有一个与此项目和常见问题相关的item_faq,那么会选中faq复选框。

模式:

项目(db中的40+行):id,其他字段

常见问题(数据库中有5行):id、问题、答案、其他字段

item_faq (db中的9行):item_id、faq_id、order、date字段

项目和常见问题都在一个many_to_many中,并且彼此相联。

我想要回来的东西,

5常见问题,如果有项目和常见问题的item_faq列表,它将选中该框。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-16 17:26:38

让我看看我是否明白:你想要faq和他们的物品(如果它存在),对吗?如果这是您想要的,您可以使用这样的with方法:

代码语言:javascript
运行
复制
$faqs = \App\Faq::with('items')->get();

在你的常见问题模型中,你应该与项目有关系。

代码语言:javascript
运行
复制
public method Items() {
    return $this->hasMany(Item::class);
}

现在,您可以从常见问题中获取项目

代码语言:javascript
运行
复制
foreach($faqs as $faq) {
    var_dump($faq->items);
}

编辑:

我认为您需要创建一个函数来检查每个复选框,看看是否应该像这样检查它:在Faq模型中,创建这个方法:

代码语言:javascript
运行
复制
public function hasItem($item) {
    return in_array($item, $this->items()->toArray());
}

在你的刀片为每一个项目,你检查它是否来自常见问题。如下所示:

代码语言:javascript
运行
复制
<input type="checkbox" name="items[]" id="{{ $item-id }}" {{ $faq->hasItem($item-id) ? 'checked' : '' }}>

请试试这个。

票数 2
EN

Stack Overflow用户

发布于 2016-09-16 00:56:48

多个item_faq行似乎具有相同的faq_id,这就是它将所有项目faq行与item_faq连接的原因。

只有当它有一对一的关系时,你才能得到和faq一样多的行。

如果您希望为每一项返回最新的常见问题解答,请按faq_id desc命令并按项目id分组。返回每项包含最新常见问题的5行

票数 1
EN

Stack Overflow用户

发布于 2016-09-17 02:49:25

代码语言:javascript
运行
复制
DB::table('faq')
->leftjoin('item_faq','faq.id','=','item_faq.faq_id')
->leftjoin('item','item_faq.item','=','item.id')
->select('faq.*','item.id as iId')->get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39417895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档