J'essaye de ne retourner que des profils spécifiques pour les utilisateurs qui ont des rôles (role_id 5 & 6) qui sont actifs dans les deux tables. Ce serait bien aussi que je puisse aussi commander par nom de famille ASC (table utilisateur).Eloquent :: Un-à-un où actif dans les deux tables, mais rôles spécifiques
user
+---------+---------+-------------+-----------+
| user_id | role_id | first_name | is_active |
+---------+---------+-------------+-----------+
| 1 | 5 | Dan | 1 |
| 2 | 6 | Bob | 0 |
+---------+---------+-------------+-----------+
profile
+------------+---------+------+-------------+-----------+
| profile_id | user_id | bio | avatar | is_active |
+------------+---------+------+-------------+-----------+
| 1 | 1 | text | example.jpg | 1 |
| 2 | 2 | text | noimage.gif | 1 |
+------------+---------+------+-------------+-----------+
Mon modèle utilisateur
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
protected $table = 'user';
protected $primaryKey = 'user_id';
protected $fillable = [
'role_id',
'first_name',
'is_active'
];
public function scopeActive(){
return $this->where('is_active', '=', 1);
}
public function role(){
return $this->belongsTo('App\Model\Role');
}
public function profile(){
return $this->hasOne('App\Model\Profile');
}
}
Mon modèle de profil
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model{
protected $table = 'profile';
protected $primaryKey = 'profile_id';
protected $fillable = [
'user_id',
'avatar',
'is_active'
];
public function scopeActive(){
return $this->where('is_active', '=', 1);
}
public function user(){
return $this->belongsTo('App\Model\User');
}
}
Mon UserController
namespace App\Controller\User;
use App\Model\User;
use App\Model\Profile;
use App\Controller\Controller;
final class UserController extends Controller{
public function listExpert($request, $response){
$user = User::active()->whereIn('role_id', array(5, 6))->orderBy('first_name', 'asc')->get();
$profile = $user->profile ?: new Profile;
$data['experts'] = $profile->active()->get();
$this->view->render($response, '/Frontend/experts.twig', $data);
return $response;
}
}
Je reçois tous mes dossiers très bien. J'obtiens tous les profils mais pas ceux qui n'appartiennent qu'à role_id 5 & 6 dans la table user. De plus, si je mets is_active à 0 dans la table des utilisateurs, ils sont toujours affichés. Mais si je mets is_active dans la table de profil, ils ne le font pas. Je n'ai pas besoin de montrer si la table User ou Profile a ces lignes inactives. Parce que vous pouvez avoir un utilisateur, mais ils peuvent ne pas vouloir un profil actif.