【问题标题】:Search by field in related/joined table using Laravel query builder使用 Laravel 查询构建器在相关/连接表中按字段搜索
【发布时间】:2021-01-11 03:45:22
【问题描述】:

我有两张表:brands 和 models。品牌表具有每个品牌的 ID 和名称。模型表有一个模型 ID 和一个外键,其中包含每个品牌 ID 和模型名称。

这是模型表,其中“cod_marca”是外键,“modelo”是模型名称。

这里有品牌表,其中“cod_marca”是 ID,“marca”是名称。

我希望用户根据每个品牌的名称进行搜索,并根据“cod_marca”列出所有内容,即如果用户搜索“雪佛兰”,我希望出现id为“1”的车型.

这是我的搜索代码:

public function buscar(Request $request) {
    $model = $request->get('marca');
    $models = DB::table('marcas')->where('marca', 'like', '%' . $marca . '%')->paginate(5);

    return view('buscar', ['models' => $models]);
}

表单代码是通用的,我只是在品牌名称中使用了<select>

【问题讨论】:

  • 如果每个表都有模型并在它们之间定义了关系,这会更简单一些。你呢?
  • model表和brand表的关系是cod_marca列。
  • 我明白了,但是你有 models for each tablerelationships 链接这些模型吗?您可以使用查询生成器 (DB::table(......),但如果您配置了模型,它会简单得多。我只是想知道你有没有
  • 没有,我只有models表,和brands表有关系。

标签: php html mysql laravel


【解决方案1】:

就个人而言,我更喜欢创建 models for each tablerelationships 链接这些模型并使用 Eloquent 来提取结果。

也就是说,您可以使用查询构建器的join method 来做您想做的事情,如下所示:

public function buscar(Request $request) {
    $model = $request->get('marca');
    $models = DB::table('models ')
        ->join('marcas', 'models.cod_marca', '=', 'marcas.cod_marca')
        ->select('models.cod_modelo', 'models.cod_marca', 'models.modelo', 'marcas.marca')
        ->where('marcas.marca', 'like', '%' . $marca . '%')
        ->paginate(5);
    return view('buscar', ['models' => $models]);
}

【讨论】:

    猜你喜欢
    • 2015-03-02
    • 2019-06-07
    • 1970-01-01
    • 2014-06-29
    • 2023-03-27
    • 2021-01-14
    • 2014-05-29
    • 2011-08-17
    • 2017-02-15
    相关资源
    最近更新 更多