Laravel雄辩的查询

时间:2019-10-01 11:29:09

标签: php mysql laravel laravel-5 eloquent

我需要Eloquent的帮助。当我尝试搜索manufacturer name时,不会返回任何内容,但是如果我尝试搜索manufacturername,则将返回一些结果。

我当前的表结构是:

产品:

 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();

请帮助我,我真的很陌生。

5 个答案:

答案 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 . '%')