2015-08-13 58 views
0

有表:如何在ORM中进行子查询?

订单: ID,AUTHOR_ID,consumer_id,supplier_id,经理标识,STATUS_ID,创建

orders_archive ID,ORDER_ID,USER_ID,创建

也就是说,有订单,任何用户都可以标记订单存档(客户,经理..)

我们需要获取由当前用户创建的所有记录,以及哪些记录添加到/已添加到存档(同一用户)

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

如何插入子查询?我是否正确理解你想使用DB :: expr()?怎么样?

+0

'orders_archive'与'orders'具有“属于”关系。所以你不能只查询当前用户的所有orders_archive并获得相应的订单吗? – kero

+0

因此,可以将档案中的所有记录,以及如何获取所有记录,但不能将其添加到档案中? – entermix

回答

0

由于它是不同的表,为什么不为ORDER_ARCHIVE设置一个新的ORM模型?然后像下面的代码可以做到这一点:

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

完全删除 - >和_where()。

0

我做到了一次,不久前我曾经在一个子查询的WHERE子句,像这样:

$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();