所以我有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
),
);
但是我觉得我没有使用预定的方式来执行这些任务,所以如果你有更好的任务,请在下面回答。
答案 0 :(得分:2)
您可能有两种方法:
queryBuilder
直接从模型加入很难实现。这就是设计queryBuilder
的原因 - 模型仅在您愿意获取数据时查询数据,例如。通过访问所谓的加入$books->getStatus()
。有关更多信息,请搜索文档:hudge example。还有一个关于优化here on SO的有用主题,所以你会知道为什么不总是直接使用模型是个好主意。
为了让它变得简单,清晰但可能不是大多数性能(取决于使用情况),因为不久前(Phalcon 1.3.2?)你可以在其中创建一个单独的模型additional conditions(未测试)示例):
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,那就有一些习惯了。
答案 1 :(得分:1)
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',
array('alias' => 'books')
);
}
}
$lostBooks = Status::findFirst("description = 'lost'")->getBooks();
$lostBooks = Status::findFirst("description = 'lost'")->books;