所以我有2张桌子
books
id name status_id
-------------------------------
1 a 0
2 b 2
...
status
id description
---------------------
0 borrowed
1 available
2 lost
Phalcon模型
class Books extends ModelBase {
public function initialize() {
$this -> belongsTo("status_id", "Status", "id");
}
}
class Status extends ModelBase {
public function initialize() {
$this -> hasMany('id', "Books", 'status_id');
}
}
我想提取所有状态描述为“丢失”的图书。这是我到目前为止所拥有的:
$lostBooks = Books::find(
'conditions' => "description=:status:",
'bind' => array(
'status' => 'lost'
),
);
更新:通过解决方法,我得到了想要的东西
$lostStatus = Status::findFirst("description='Closed'");
$lostBooks = Books::find(
'conditions' => "status_id=:id:",
'bind' => array(
'id' => $lostStatus -> id
),
);
但是我觉得我没有使用预期的方式来执行这些任务,因此,如果您有更好的任务,请在下面回答。
您可能有两种方法:
queryBuilder
直接从模型进行联接很难实现。这就是为什么queryBuilder
设计的原因-例如,仅当您愿意获取数据时,模型才查询数据。通过访问所谓的加入$books->getStatus()
。有关更多信息,请搜索文档:h示例。关于SO的优化,这里还有一个有用的话题,因此您将知道为什么不总是直接使用模型是个好主意。
为了使它变得简单,清晰,但也许不是大多数性能(取决于使用情况),因为不久前(Phalcon 1.3.2?),您可以创建一个带有附加条件的单独模型(未经测试的示例):
class LostBooks extends Books {
public function initialize() {
$this -> belongsTo("status_id", "Status", "id",
[
'alias' => 'status',
'params' => [
'description' => 'lost'
]
]);
}
}
正确声明之后,您就可以通过
$lostBooks = LostBooks::find();
PS:使用array()
代替[]
,如果您是PHP 5.4之前的用户,请养成一些习惯。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句