2017-08-09 3 views
0

Tel est le cas jeComment ajouter une condition à une relation éloquente

$user = User_picture::where('is_main','=',1)->where('user_id','=',Auth::user()->id); 

Cela signifie qu'un utilisateur a beaucoup de photos, mais il n'y a qu'une seule image qui a is_main valeur 1.

J'ai essayé ceci.

public function active_picture() 
{ 
    return $this->hasMany('App\User_picture')->find($this->is_main); 
} 

Ceci ne renvoie rien d'autre qu'une erreur indiquant que ce devrait être un objet. Quelqu'un peut-il m'aider avec l'affaire?

Répondre

0

HasMany est destiné à renvoyer une collection puisqu'il s'agit d'une méthode de relation un à plusieurs.

Si vous souhaitez uniquement renvoyer un résultat, vous devez utiliser HasOne avec les conditions. Pour définir les conditions, vous utilisez where() not find(). Find() est uniquement utilisé pour faire correspondre la clé primaire du modèle.

public function active_picture() 
{ 
    return $this->hasOne('App\User_picture') 
      ->where('is_main', 1); 
} 
0

Vous pouvez déclarer un accesseur comme:

Dans le modèle de l'utilisateur:

// déclarer relation:

public function pictures() 
{ 
    return $this->hasMany(Picture::class); 
} 

// déclarer accesseur:

public function getMainPictureAttribute() 
{ 
    return $this->pictures()->where('is_main', 1)->first(); 

} 

Donc vous pouvez faire le est:

auth()->user()->main_picture ...