簡體   English   中英

在另一個表中具有條件的Phalcon模型find()

[英]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
    ),
);

但是我覺得我沒有使用預期的方式來執行這些任務,因此,如果您有更好的任務,請在下面回答。

您可能有兩種方法:

1.通過queryBuilder

直接從模型連接很難實現。 這就是為什么設計了queryBuilder的原因-例如,僅當您願意獲取數據時,模型才查詢數據。 通過訪問假定加入的$books->getStatus() 有關更多信息,請搜索文檔: 輕舉example 關於SO的優化, 這里還有一個有用的話題,因此您將了解為什么不總是直接使用模型是個好主意。

2.通過創建一個單獨的模型

為了使它變得簡單,清晰,但也許不是大多數性能(取決於使用情況),因為不久前(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.

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