簡體   English   中英

Yii:使用范圍從相關模型中獲取不同的字段值

[英]Yii: Getting distinct field values from a related model using scopes

我正在使用Yii的Admin視圖管理我的Project模型。

帶有過濾器的列之一是項目的用戶(所有者)。

我可以做這樣的事情:

'filter'=> CHtml::dropDownList('Project[user_id]', $model->user_id,
    CHtml::listData(User::model()->orderAsc()->findAll(),
    'id','username'),array('empty'=>'(select)')),

這給了我用戶表中所有用戶的列表,但是我想創建一些東西來吸引擁有一個項目的不同用戶(我有200個用戶,但是只有少數幾個傾向於創建項目)。

項目和用戶通過以下方式關聯:

'user' => array(self::BELONGS_TO, 'User', 'user_id')

我已經在findAll()方法中嘗試了一堆選項,但是沒有一個起作用,我不是在嘗試使用范圍。

到目前為止,我已經嘗試過了:

'filter'=> CHtml::dropDownList('Project[user_id]', $model->user_id,
    CHtml::listData(Project::model()->with('user')->ownerUsernames()->
    findAll(), 'id','username'),array('empty'=>'(select)')),

而我的范圍定義為:

'ownerUsernames' => array(
    'with' => 'user.username',
    'select' => 'user.username',
    'distinct' => true,
),

我已經嘗試了上面的許多迭代,但是我已經失去了計數'with'=>'username''select'=>'username'等的能力,但是似乎無法正常工作。

我嘗試用$ model替換Project :: model()只是因為我認為它可能與它有關,但是沒有運氣。

任何想法表示贊賞。 對Yii來說還很新,但這似乎可以解決。

一切准備就緒。 為項目模型定義一個getter函數,例如

public function getUsername()
{
return $this->user->name;
}

現在您應該可以使用

CHtml::dropDownList('Project[user_id]', $model->user_id,
    CHtml::listData(Project::model()->with('user')->ownerUsernames()->
    findAll(), 'id','username'),array('empty'=>'(select)'))

邏輯是CHtml :: listData將以模型的形式獲取項目,它將使用$ project-> id創建密鑰,並使用$ project-> username創建值。 因為您創建了getted函數,所以它將知道$ project-> username是什么。 不幸的是CHtml :: listData(Project :: model()-> with('user')-> ownerUsernames()-> findAll(),'id','user.name')將無法正常工作,因為它無法執行'user .name”之類的東西。

實際上,您可以做很多事情來實現這一目標,但是由於時間的消耗,某些方法可能不合適。 我更喜歡解決這個問題,因為

  1. 在具有屬性的數據庫中創建名為user_project的表
    ID
    user_id(復制到用戶表)
    project_id(fk到項目表)
  2. 創建項目時,還請使用給定的字段填充user_project。
  3. 建立其模型,您將看到其中的關系。 現在做一個像
 public function getName() { return user->name;//here i have assumed that the relation name is user } 
  • 現在查詢該表
 $user=UserProject::mode::findAll(); $list=CHtml::listData($user,'user_id','name'); 

並使用此列表填充dropDownList。 這種方法的好處是您不需要查詢用戶表的所有用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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