簡體   English   中英

Phalcon \\ Mvc \\ Model :: find()以及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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM