Laravel或者哪个或不同的模型

时间:2013-12-06 16:48:46

标签: php laravel

我正在尝试执行一个查询,过滤一个表上的2列或另一个表上的2列。这就是我到目前为止所做的:

// In my controller
return $registry = Registry::search($first_name, $last_name)->get();


// In my model
public function user()
{
    return $this->belongsTo('User');
}

public function scopeSearch($query, $first_name, $last_name)
{
    $search = $query->where('coregistrant_first_name', 'LIKE', "%$first_name%")
                 ->where('coregistrant_last_name', 'LIKE', "%$last_name%")
                 ->orWhere(function($query) use ($first_name, $last_name)
                 {
                    $query->$this->user()->where('first_name', 'LIKE', "%$first_name%");
                 });

   return $search;
}

我尝试了很多不同的事情,现在我因{1}行而遇到了这个错误:

$query->$this->user()

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

@Keith,在Laravel中,您无法使用关系动态选择数据。

据我所知,Laravel支持以下规则来使用关系检索数据:

  1. $registers = Registry::with('user')->get();

  2. $registers = Registry::where('xyz', '1')->get();

    //然后你可以加载关系,如果你需要

    $registers->load('user');

  3. 在你的模特中

    public function user() { return $this->belongsTo('User')->where('first_name', 'LIKE', "%xyz%"); }

  4. 然后从你的控制器:

     $registers = Registry::with('user')->get();
    
    1. 如果你有一对多的关系,
    2. 说你有licenses关系

      //您可以指定运算符和计数:

      $registers = Registry::has('licenses', '>=', 3)->get();

      参考:http://laravel.com/docs/eloquent#querying-relations

答案 1 :(得分:0)

我最终使用查询构建器来完成它。