我基于Laravel创建一个项目,并且将companies
用作数据透视表时,表attributes
,attribute_company
和attribute_company
的关系是多对多关系连接companies
和attributes
表。
我从客户那里得到了attribute_id
的数组,我需要获得完全具有全部属性的公司的结果。
我发现的唯一解决方案是查询whereHas
并与whereIn
组合在一起,如下所示:
Company::whereHas('attributes', function (Builder $query) use ($atts_ids) {
$query->whereIn('attribute_id', $atts_ids);
})->get();
如果找到至少一个companies
(这不是我要查找的内容),则此查询将返回attribute_id
。
如果有人能让我更清楚一点,那就太好了。
提前谢谢大家:)
答案 0 :(得分:5)
一种可能的解决方案:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
function clickMe() {
// THE JSON ARRAY.
var cars = [
{
"ID": "001",
"Car_Name": "BMW"
},
{
"ID": "002",
"Car_Name": "AUDI"
},
{
"ID": "003",
"Car_Name": "Range Rover"
}
];
var ele = document.getElementById('sel');
for (var i = 0; i < cars.length; i++) {
// POPULATE SELECT ELEMENT WITH JSON.
ele.innerHTML = ele.innerHTML +
'<option value="' + cars[i]['ID'] + '">' + cars[i]['Car_Name'] + '</option>';
}
}
function show(ele) {
// GET THE SELECTED VALUE FROM <select> ELEMENT AND SHOW IT.
var msg = document.getElementById('msg');
msg.innerHTML = 'Selected Car: <b>' + ele.options[ele.selectedIndex].text + '</b> </br>' +
'ID: <b>' + ele.value + '</b>';
}
</script>
</head>
<body>
<div>
<div>
<!--Click button-->
<p style="margin-top:20px;">
<input type="button" onclick="clickMe"value="Click to Select" />
</p>
<!--Select Menu-->
<p>
<select id="sel" onchange="show(this)">
<option value=""> - - Select - -</option>
</select>
</p>
<p id="msg">
</p>
</div>
</div>
</body>
</html>