![](/img/trans.png)
[英]Phalcon\Mvc\Model::find() failes with condition “column value IN (list)”
[英]Phalcon Model find() with condition in another table
所以我有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()
。 有关更多信息,请搜索文档: 轻举example 。 关于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:如果您以前使用过PHP 5.4,请使用array()
代替[]
,这要养成一些习惯。
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.