从封闭内部抓取变量

时间:2014-04-21 17:05:05

标签: php laravel closures

考虑到这个关闭:

$users = User::with(array('posts' => function($query) {
    $query->orderBy('created_at', 'desc');
}))->get();

如何将$query传递给get(),例如->get('query')

如果可能的话。

更新

这是接受答案的后续行动。

以下是针对类似情况的结果代码,基于$query->getRelation()提示。

$query = Ticket::with(array('user' => function($q) use ($search) {
    $q->where('name', 'LIKE', '%'. $search .'%')->orWhere('username', 'LIKE', '%'. $search .'%');
}));

return $query->whereIn('user_id', $query->getRelation('user')->lists('id'))->paginate(10);

在Eloquent中实现它的众多方法中的另一种。

1 个答案:

答案 0 :(得分:0)

这对我没有任何意义,但我认为您可以尝试这样做以获取$query实例:

$users = User::with(array('posts' => function($query) {
    $query->orderBy('created_at', 'desc');
}));
$relation = $users->getRelation('posts');

$relation将包含Illuminate\Database\Eloquent\Relations\HasMany的实例(希望如此),但不确定如何使用它,但您可以使用$relation->getForeignKey()获取foreignkey属性。最后,$users->get()将执行查询。

您也可以使用以下内容获取关系($ query)对象:

$user = User::query();
$relation = $user->getRelation('posts');
dd($relation); // Illuminate\Database\Eloquent\Relations\HasMany

P / S:我不清楚你要做什么,如果它有所帮助,你得到你想做的事情,那么请在评论中分享想法/事情。谢谢!