Tôi không thể tìm thấy quá nhiều tài liệu về việc áp dụng phạm vi mặc định cho mô hình trong yii, tôi tự hỏi liệu có ai đó có thể giải thích hoặc chỉ cho tôi đúng hướng không.áp dụng phạm vi mặc định với tham chiếu đến mối quan hệ trong yii
Phiên bản nhanh chóng của câu hỏi của tôi:
Có thể thêm một liên quan đến một phạm vi mặc định, hoặc để thêm một 'với' tiêu chuẩn theo mặc định cho tất cả các tìm kiếm AR trên một mô hình?
Phiên bản dài của câu hỏi của tôi:
Một bản tóm tắt nhanh chóng của ứng dụng của tôi:
Tôi có hai mô hình, provider
và item
. Trong đó có một mối quan hệ m: 1, nơi một nhà cung cấp có thể có nhiều mặt hàng, nhưng mỗi mục chỉ có thể có một nhà cung cấp.
Cho đến nay tôi có những mối quan hệ:
class Provider extends CActiveRecord
{
...
public function relations()
{
return array(
'items' => array(self::HAS_MANY, 'Item', 'id_provider', 'order'=>'rank DESC'),
);
}
...
}
class Item extends CActiveRecord
{
...
public function relations()
{
return array(
'provider' => array(self::BELONGS_TO, 'Provider', 'id_provider'),
);
}
...
}
Trong mô hình các mặt hàng của tôi, tôi đã có một defaultScope đó lọc ra tất cả các mục ẩn (tức là chỉ hiển thị các mặt hàng được thiết lập để offline = false
):
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'condition'=>"`$alias`.`offline` = false",
);
}
Điều tôi muốn làm bây giờ, cũng lọc ra các mục mà nhà cung cấp của họ được đặt thành ngoại tuyến (tức là chỉ hiển thị các mục ở đây provider.offline = false
cùng với item.offline = false
hiện tại).
tôi đã cố gắng tham gia vào bảng các nhà cung cấp trong defaultScope:
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'join'=>"JOIN `provider` AS `provider` ON `provider`.`id` = `$alias`.`id_provider`",
'condition'=>"`$alias`.`offline` = false AND `provider`.`offline` = false",
);
}
Tuy nhiên JOIN áp dụng sau khi câu lệnh ON, và causese một lỗi (CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'provider.offline' in 'on clause'
).
Tôi cũng đã thử thêm một với tiêu chí để các defaultScope:
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'with'=>"provider",
'condition'=>"`$alias`.`offline` = false AND `provider`.`offline` = false",
);
}
Nhưng tôi nhận được lỗi tương tự: SQLSTATE [42S22]: Cột không tìm thấy: 1054 Unknown column 'provider.offline' trong ' trên mệnh đề'`).
Mọi đề xuất?
Dĩ nhiên ! Tôi đã đặt điều kiện trong tuyên bố 'điều kiện' chính, không phải trong 'với'. Đề xuất đầu tiên của bạn hoạt động hoàn hảo, cảm ơn! – Stu