2013-12-06 5 views
0

Я пытаюсь сделать запрос, который фильтрует по 2 столбцам на одной таблице ИЛИ 2 столбца на другой. Это то, что я до сих пор:Laravel orWhere или другая модель

// 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; 
} 

Я пробовал много разных вещей, и теперь я застрял на $query->$this->user() линии с этой ошибкой:

Undefined property: Illuminate\Database\Query\Builder::$[] 

Каждый знает, как я могу это исправить Эта проблема?

+0

'$ query -> $ this' Сначала я думаю, что это ваша проблема? Разве это не '$ query-> this-> user()'? Поскольку в настоящее время он написан, вы ищете переменную-член с именем любого строкового значения, которое хранится в глобальной переменной $ this. – echochamber

+0

Теперь у меня есть эта ошибка - Неопределенное свойство: Illuminate \ Database \ Query \ Builder :: $ this – Keith

+0

Вы используете php 5.4 или больше? – user1669496

ответ

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%"); }

Затем из контроллера:

$registers = Registry::with('user')->get(); 
  1. Если у вас есть один ко многим отношений,

Скажем, у вас есть licenses отношения

// Вы можете указать оператор и подсчет:

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

Ссылка: http://laravel.com/docs/eloquent#querying-relations

+0

Вы пытались,' Registry :: where ('xyz', 1) -> user() - > где ('first_name', 'LIKE', "% xyz%") -> get() '? – afarazit

+0

Это работает? вам нужна пользовательская область. – Anam

Смежные вопросы