我需要Eloquent的帮助。当我尝试搜索manufacturer name
时,不会返回任何内容,但是如果我尝试搜索manufacturer
或name
,则将返回一些结果。
我当前的表结构是:
产品:
manufacturer_id, FK id on manufacturer
model_id, FK id id on model
制造商:
id
name
型号:
id
manufacturer_id, FK id on manufacturer
name
我的代码是这样的:
$q = Input::get("query");
$words = str_replace(" ", "%", $q);
$cars = Product::whereHas('model', function ($query) use ($words) {
$query->where('name', 'like', "%$words%");
})->orWhereHas('manufacturer', function ($query) use ($words) {
$query->where('name', 'like', "%$words%");
})->get();
请帮助我,我真的很陌生。
答案 0 :(得分:0)
尝试一下。
launch.json
答案 1 :(得分:0)
使用它。
$cars = Product::whereHas('model', function ($query) use ($words) {
$query->where('name', 'like', '%' . $words . '%');
})->orWhereHas('manufacturer', function ($query) use ($words) {
$query->where('name', 'like', '%' . $words . '%');
})->get();
在使用"%$words%"
时,它不会有任何价值。
"%{$words}%"
或'%' . $words . '%'
,您也可以使用它。
答案 2 :(得分:0)
我不确定您为什么要这样做:
$words = str_replace(" ", "%", $q);
因为稍后您还是要使用$words
变量添加“%”。所以这样做:
$words = trim(Input::get("query"));
$cars = Product::whereHas('model', function ($query) use ($words) {
$query->where('name', 'like', "%$words%");
})->orWhereHas('manufacturer', function ($query) use ($words) {
$query->where('name', 'like', "%$words%");
})->get();
这应该适用于单词搜索。
现在,如果要匹配多个单词,并用空格分隔,则需要使用explode()
来实际获得每个单词,并编写一个OR AND WHERE
组合以匹配结果。或者,您可以使用MYSQL全文查询,但这不在此问题的范围内。
请为此另外提出一个问题。
我希望对您有帮助
答案 3 :(得分:0)
使用串联,例如:
$query->where('name', 'like', '%' . $words . '%);
相反:
$query->where('name', 'like', "%$words%");
答案 4 :(得分:0)
尝试这个
$query->Where('column_name', 'LIKE', '%' . $value . '%')