ORM中如何做子查询?
How do subquery in ORM?
有表格:
订单:
id
author_id
consumer_id
supplier_id
manager_id
status_id
created
orders_archive
id,
order_id,
user_id,
created
即有订单,任何用户都可以标记订单存档(客户,经理..)
我们需要获取当前用户创建的所有记录,并因此添加到/已添加到存档(同一用户)
$orders = ORM::factory('Order')
->where('author_id', '=', $this->user->id)
->and_where(?)
如何插入子查询?我是否正确理解您想使用 DB::expr()
?怎么样?
因为它是一个不同的 table,为什么不为 orders_archive 设置一个新的 ORM 模型?然后像下面的代码会做到这一点:
$orders_archive = ORM::factory('Order_Archive')
->where('user_id', '=', $this->user->id)
->find_all();
完全删除 ->and_where()。
我不久前做过一次,我在 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();
有表格:
订单:
id
author_id
consumer_id
supplier_id
manager_id
status_id
created
orders_archive
id,
order_id,
user_id,
created
即有订单,任何用户都可以标记订单存档(客户,经理..)
我们需要获取当前用户创建的所有记录,并因此添加到/已添加到存档(同一用户)
$orders = ORM::factory('Order')
->where('author_id', '=', $this->user->id)
->and_where(?)
如何插入子查询?我是否正确理解您想使用 DB::expr()
?怎么样?
因为它是一个不同的 table,为什么不为 orders_archive 设置一个新的 ORM 模型?然后像下面的代码会做到这一点:
$orders_archive = ORM::factory('Order_Archive')
->where('user_id', '=', $this->user->id)
->find_all();
完全删除 ->and_where()。
我不久前做过一次,我在 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();