2016-07-26 14 views
0

User-Modell steht in Beziehung folgen:Yii2 hasMany ohne Link Felder

public function getWorkload() : ActiveQuery 
{ 
    return $this->hasMany(ScheduleWorkload::className(), ['staff_id' => 'id']); 
} 

Methode Suchen:

$staffs = User::find() 
      ->alias('u') 
      ->joinWith(['workload as uw' => function($q) { 
       $q->select(['uw.staff_id', 'uw.date', 'uw.time_ranges']); 
      }], true) 
      ->select([ 
       'u.id', 
       'CONCAT(u.first_name, \' \', u.last_name) as name', 
       'u.first_name', 
       'u.last_name', 
       'u.undelivered_messages', 
      ]) 
      ->where(['u.is_staff' => 1]) 
      ->asArray() 
      ->all() 
      ; 

ich ohne uw.staff_id in Folge gesetzt bekommen Daten benötigen? Ist es ohne Nachbearbeitung möglich?

UPDATE: Ergebnismenge, die ich enter image description here

habe ich „Arbeitsbelastung“ als Array-Parameter benötigen, aber nicht verwenden, Nachbearbeitung und nur ausschließen „staff_id“ von Ergebnismenge.

Raw SQL:

SELECT `u`.`id`, `u`.`undelivered_messages` 
FROM `user` `u` 
LEFT JOIN `schedule_workload` `uw` ON `u`.`id` = `uw`.`staff_id` 
WHERE `u`.`is_staff`=1 
+0

und welche Ergebnismenge haben Sie jetzt? Wie ich sehen kann, ist die Variable '$ staffs' vom Typ' ActiveQuery'. Was ist das Ergebnis von '$ staffs-> createCommand() -> rawSql'? – oakymax

+0

Ich aktualisiere Post. Bitte beachten Sie den Update-Bereich. $ Mitarbeiter ist Array. Ich habe vergessen, -> asArray() -> all() – johndoek

Antwort

1

Sie können nicht ohne Nachbearbeitung in Yü tun, weil ActiveQuery für Fremdschlüssel in verschachteltem Abfrageergebnis suchen verschachtelte Arrays für verbundene Beziehung aufzubauen.

Der bequemste Weg für Sie verwenden ArrayHelper:

$staffs = User::find() 
    ->alias('u') 
    ->joinWith(['workload') 
    ->where(['u.is_staff' => 1]) 
    ->all(); 

return \yii\helpers\ArrayHelper::toArray($staffs, [ 
    User::className() => [ 
     'id', 
     'first_name', 
     'last_name', 
     'name' => function ($user) { 
      return $user->first_name . ' ' . $user->last_name 
     }, 
     'undelivered_messages', 
     'workload', 
    ], 
    ScheduleWorkload::className() => [ 
     'date', 
     'time_ranges', 
     'comment' 
    ] 
], true); 
Verwandte Themen