Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Laravel 5,左联接返回联接右侧的所有项_Mysql_Laravel_Left Join - Fatal编程技术网

Mysql Laravel 5,左联接返回联接右侧的所有项

Mysql Laravel 5,左联接返回联接右侧的所有项,mysql,laravel,left-join,Mysql,Laravel,Left Join,我有3个表:“项目”、“常见问题”和一个联接表:“项目\常见问题”。item_faq表包含该关系以及一个order列,用于帮助为每个项目订购faq 目前数据库中共有5个常见问题。item_faq表中共有9行将这5个faq与多个项目关联 上下文是管理员可以创建/编辑项目,并选择将包括哪些常见问题及其顺序 在“项目管理”“创建/编辑”视图中,我需要显示所有常见问题,并能够选中要包含的问题 在我的控制器中,我正在执行如下左连接: $faqs = \App\Faq::leftJoin('item_faq

我有3个表:“项目”、“常见问题”和一个联接表:“项目\常见问题”。item_faq表包含该关系以及一个order列,用于帮助为每个项目订购faq

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

上下文是管理员可以创建/编辑项目,并选择将包括哪些常见问题及其顺序

在“项目管理”“创建/编辑”视图中,我需要显示所有常见问题,并能够选中要包含的问题

在我的控制器中,我正在执行如下左连接:

$faqs = \App\Faq::leftJoin('item_faq', 'faq.id', '=', 'item_faq.faq_id')->get();
$faqs = \App\Faq::with('items')->get();
我是dd($FAQ)来测试返回的内容,我得到了9个对象。这就是我的问题所在:我需要它返回5个常见问题,如果有一个项目与此项目和常见问题相关,则选中常见问题复选框

模式:

项目(数据库中40多行):id,其他字段

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

item\u faq(数据库中有9行):item\u id、faq\u id、订单、日期字段

项目和常见问题都是以多对多的方式进行的

我想得到的


5个常见问题解答,如果该项目和常见问题解答有一个项目常见问题解答列表,它会选中该框。

似乎多个项目常见问题解答行具有相同的常见问题解答id,这就是它将所有项目常见问题解答行与项目常见问题解答合并的原因

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

如果要为每个项目返回最新的faq,请按faq_id desc和group by item id排序。返回5行,其中包含每个项目的最新faq 您希望常见问题解答及其项目(如果存在),对吗? 如果这是您想要的,您可以将
方法结合使用,如下所示:

$faqs = \App\Faq::leftJoin('item_faq', 'faq.id', '=', 'item_faq.faq_id')->get();
$faqs = \App\Faq::with('items')->get();
在您的Faq模型上,您应该与项目建立关系

public method Items() {
    return $this->hasMany(Item::class);
}
现在,您可以使用从常见问题解答中获取项目

foreach($faqs as $faq) {
    var_dump($faq->items);
}
编辑:

我认为您需要创建一个函数来检查每个复选框,并查看是否应该这样检查: 在常见问题解答模型中,创建以下方法:

public function hasItem($item) {
    return in_array($item, $this->items()->toArray());
}
在每个项目的刀片中,检查它是否来自常见问题解答。像这样:

<input type="checkbox" name="items[]" id="{{ $item-id }}" {{ $faq->hasItem($item-id) ? 'checked' : '' }}>
hasItem($item id)?'选中“:”}}>

请试试这个。

发布您的模式+数据+预期结果。好的,这很有效。我必须根据我的设置进行轻微的更新,但它可以工作。它唯一失败的事情是根据联接表中的order列进行排序。这与$faqs=\App\Faq::with('items')->get()相关联;这很有效,但却忽略了顺序。关于如何包含订单有什么想法吗?是否要按项目列或Faq列排序?这返回的是join表中存在的9个项目,而不是Faq表中存在的5个项目。当然,因为我没有设置任何条件,这取决于您,我正在尝试返回Faq表中的5个项目,按联接表顺序列排序,并检查是否存在关系。我的目标不是最新的目标。我需要将5个常见问题加载到复选框中,如果存在关系,则选中复选框。项目和常见问题很多
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();