2015-08-13 7 views
0

Есть столы:Как подзапрос в ORM?

заказы: идентификатор, author_id, consumer_id, supplier_id, manager_id, status_id, созданный

orders_archive идентификатор, order_id, user_id, созданный

То есть, есть заказы, любой пользователь может пометить архив заказов (клиент, менеджер ..)

Нам нужно получить все записи, созданные текущим пользователем и которые, таким образом, добавлены в/были добавлены в архив (тот же пользователь)

$orders = ORM::factory('Order') 
->where('author_id', '=', $this->user->id) 
->and_where(?) 

Как вставить подзапрос? Правильно ли я понимаю, что вы хотите использовать DB :: expr()? Как?

+0

'orders_archive' имеет отношение к" заказам ". Так что вы не можете просто запросить все orders_archive от текущего пользователя и получить соответствующие заказы? – kero

+0

Таким образом, можно привести все записи в архив и как получить все записи, но не быть теми, которые были добавлены в архив? – entermix

ответ

0

Как это другая таблица, почему бы не создать новую модель ORM для order_archive? Тогда что-то вроде следующего кода сделало бы это:

$orders_archive = ORM::factory('Order_Archive') 
->where('user_id', '=', $this->user->id) 
->find_all(); 

Удалите -> and_where() полностью.

0

Я сделал это один раз, не так давно, когда я использовал подзапрос в где положение так:

$query = ORM::factory('user')->from(array('users', 'user')); 
$query->where(DB::Expr('NOT'), 'EXISTS', DB::Expr('(SELECT * FROM blacklists as b WHERE b.user_id = user.id AND b.target_user_id =' . $this->request->post('requester_id') . ')')); 

, но другой способ сделать такую ​​вещь будет выглядеть так:

$query = DB::select()->from(array('table', 't')); 
$sub = DB::select('imgname')->from('p_images')->where('pro_id','=',DB::Expr('`p`.`id`'))->and_where('imgtype','=','11')->limit(1); 
$query->select(array($sub, 'prof_image')); 
$p = $query->as_object()->execute();