![](/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.