使用外键进行SQL搜索

时间:2018-12-24 13:59:17

标签: mysql sql

我有两个桌子:啤酒和啤酒厂

Schema::create('breweries', function (Blueprint $table) {
   $table->increments('id');
   $table->unsignedInteger('user_id');
   $table->foreign( 'user_id' )
         ->references( 'id' )->on( 'users' )
         ->onUpdate( 'cascade' );
   $table->string('brewery_name');
   $table->timestamps();
});

Schema::create('beer', function (Blueprint $table) {
   $table->increments('id');
   $table->unsignedInteger('brewery_id');
   $table->foreign( 'brewery_id' )
         ->references( 'id' )->on( 'breweries' )
         ->onUpdate( 'cascade' );
   $table->string('beer_name');
   $table->timestamps();
});

我要搜索Beer_name和Brewery_name。

仅在搜索Beer_name时,我使用以下查询:

$beer = Beer::where('user_id', Auth::id())
         ->where(function($query) use ($search) {
           $query->where('beer_name','LIKE','%'.$search."%")
                 ->orWhere('brewery_id','LIKE','%'.$search."%")
        })->get();

这很好用,因为'beer_name'和'brewery_id'都是啤酒表的字段。

如何更改此查询,以便我也搜索'brewery_name'(=啤酒厂表的一部分)而不是brewery_id?

1 个答案:

答案 0 :(得分:1)

由于这是标记为SQL的,所以我用Sql查询而不是php(?)代码回答

SELECT * 
FROM beer b
JOIN breweries r ON r.id = b.brewery_id
WHERE b.beer_name LIKE ?
   OR r.brewery_name LIKE ?

替换?分别带有啤酒搜索词和啤酒搜索词