![](/img/trans.png)
[英]Empty resultset when using Phalcon\Mvc\Model\Query\Builder
[英]Phalcon\Mvc\Model::find() together with Phalcon\Mvc\Model\Query\Builder
我正在嘗試使用Phalcon \\ Mvc \\ Model \\ Query \\ Builder對象以及Phalcon \\ Mvc \\ Model :: find()方法來自定義數據加載行為。
表中的所有模型行均具有“ record_status”字段,該字段用於將記錄標記為有效/無效。
我打算擴展Model :: find()和Model :: findFirst()方法,以始終向我的所有Model查詢添加“ record_status = 1”約束。 但是現在,我只是想將Query \\ Builder對象從外部傳遞給:: find()方法:
class User extends Phalcon\Mvc\Model
{
}
$user = new User();
/**
* @var Phalcon\Mvc\Model\Query\Builder
*/
$query = $user->getModelsManager()->createBuilder();
$query->where('email = :email:', [
'email' => 'root@yahoo.com'
])->andWhere('record_status = :status:', [
'status' => 1
])->from('users');
$found = $user->find($query);
foreach ($found as $foundUser) {
...
}
問題是-> find($ query)從數據庫返回所有行,而忽略了設置為$ query的WHERE子句。
檢查$ query和$ user的屬性時,我看到以下相關的受保護屬性:
$query::_conditions = '(email = :email:) AND (record_status = :status:)';
$query::_bindParams = array(
'email' => 'root@yahoo.com',
'status' => 1
);
$user::_count = 4; // This is wrong, this corresponds to TOTAL number of rows
$user::_result->_bindParams = NULL; // Bound parameters have disappeared
$user::_result->_sqlStatement = 'SELECT `users`.`id`, `users`.`email`, `users`.`record_status` FROM `users`'; // As you can see, there is no WHERE clause
我使用的是Phalcon 1.3.0,PHP 5.5.1。
我希望find()和findFirst()方法可以接受Query \\ Builder()對象並獲取正確的記錄。 這是錯誤還是我處理錯誤?
謝謝,Temuri
是的,你錯了。
Model::find()
和Model::findFirst()
函數接受數組,整數或字符串,並且是查詢構建器的包裝器。
您至少有兩個選擇:
a)直接使用查詢生成器:
// ... here is your query builder script as in question
$results = $query->getQuery()->execute();
$firstFound = $results->getFirst();
b)將數組傳遞給Model::findFirst()
:
$firstFound = User::findFirst(
array(
'(email = :email:) AND (record_status = :status:)',
'bind' => array('email' => 'root@yahoo.com', 'status' => 1)
)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.