2017-08-09 49 views
1

我需要为相关模型设置属性为安全模式。我使用翻译关系的搜索模型。在那里,我想将title属性设置为安全。在Yii2中为相关模型设置属性安全

问题在于title属性在相关的ArticleTranslation模型中是必需的。

我使用creocoder的yii2可翻译行为。

class ArticleSearch extends Article 
{ 

public function rules() 
{ 
    return [ 
     [['id', 'user_id', 'status', 'category_id', 'created_at', 'updated_at'], 'integer'], 
     [['title', 'summary', 'content'], 'safe'], 
    ]; 
} 


/** 
* @inheritdoc 
*/ 
public function scenarios() 
{ 
    // bypass scenarios() implementation in the parent class 
    return Model::scenarios(); 
} 

/** 
* Creates data provider instance with search query applied 
* 
* @param array $params 
* 
* @return ActiveDataProvider 
*/ 
public function search($params) 
{ 
    // $this->detachBehaviors(); 
    $query = Article::find(); 
    $query->joinWith(['translations']); 
    // add conditions that should always apply here 

    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 



    if ($this->load($params) && !$this->validate()) { 
     // uncomment the following line if you do not want to return any records when validation fails 
     // $query->where('0=1'); 
     return $dataProvider; 
    } 

    // grid filtering conditions 
    $query->andFilterWhere([ 
     'id' => $this->id, 
     'user_id' => $this->user_id, 
     'status' => $this->status, 
     'category_id' => $this->category_id, 
     'created_at' => $this->created_at, 
     'updated_at' => $this->updated_at, 
    ]); 

    $query->andFilterWhere(['like', 'article_translation.title', $this->title]) 
     ->andFilterWhere(['like', 'article_translation.summary', $this->summary]) 
     ->andFilterWhere(['like', 'content', $this->content]); 

    return $dataProvider; 
} 

}

回答

0

如果你想使用title属性的搜索基于连接模型关系的相关模型,你应该声明适当的公共变种为允许在搜索模式中使用(并宣布该$标题安全)例如:

class ArticleSearch extends Article 
{ 

    public $title; 

    public function rules() 
    { 
     return [ 
      [['id', 'user_id', 'status', 'category_id', 'created_at', 'updated_at'], 'integer'], 
      [['title', 'summary', 'content'], 'safe'], 
     ]; 
    } 
    .... 
+0

谢谢。这是工作。 –

+0

好,如果我的答案是正确的,请将其标记为已接受...看看这里如何 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – scaisEdge