急切加载记录后在 Laravel 中搜索?

Search in Laravel after eager loading the records?

我有一个 flights table,它有两个外键列:起点和终点,它们都链接到 airports table。现在我可以很好地急切加载记录了:

Flight::with('origin', 'destination')->get();

但现在我想做类似的事情:

Flight::with('origin', 'destination')->where('origin.name', 'LIKE', "$query%")->get();

但它给我一个错误,说没有名称为 origin.name 的列,这对我来说很有意义,但是我如何在急切加载的数据中搜索记录?

whereHas 应该有效:

Flight::with('origin', 'destination')->whereHas('origin', function($q) use ($query){
    $q->where('name', 'LIKE', "$query%");
})->get();

你需要一个闭包来让它正确。这是一个简单的例子。

$places = Flight::with(array('origin' => function($query) use($query_name)
{
 $query->where('name', 'LIKE', "$query_name%");
}))->get();

希望对您有所帮助。