motor - foreach laravel controller



Relación de muchos a muchos de tres vías en Laravel (1)

A menudo uso otro modelo para abstraer una relación tripartita de muchas a muchas relaciones.

Tenemos nuestra relación que llamaré la relación de relation .

La estructura db :

table relations: id, user_id, student_id, plan_id

La aplicación tiene los siguientes cuatro modelos:

  • Usuario
  • Estudiante
  • Plan
  • Relación

Aquí es cómo conectamos los cuatro modelos usando Relaciones:

Usuario, plan, estudiante:

function relations() {
   return $this->hasMany(Relation::class);
}

Relación:

function student() {
   return $this->belongsToMany(Student::class);
}

function user() {
   return $this->belongsToMany(User::class);
}

function plan() {
   return $this->belongsToMany(Plan::class);
}

Puede recuperar las entidades de esta manera:

//get the plan of a student related to the user
$user->relations()->where('student_id', $student)->first()->plan();

//get all entities from the relation
foreach ($user->relations as $relation) {
    $plan = $relation->plan;
    $student = $relation->student;
}

Es la única solución que he encontrado en todo el tiempo que he estado desarrollando en Laravel.

https://src-bin.com

Tengo tres modelos que deben relacionarse en una tabla dinámica: usuario, estudiante, plan. Entonces, cada usuario puede suscribir un alumno a un plan.

Lo que he encontrado hasta ahora es crear un pivote para dos de los modelos, digamos Usuario y Plan, y adjuntar el student_id como un campo adicional:

$user->plans()->attach([1 => ['student_id' => $student_id]);

Un problema con esto es que si trato de recuperar los planes para un usuario en particular, no obtengo el modelo de estudiante, solo el ID, entonces:

return $this->BelongsToMany('App\Plan', 'plans_students_users', 'user_id', 'plan_id')
->withPivot('student_id');

Entonces, tendría que hacer una segunda consulta para obtener el modelo de estudiante.

¿Hay alguna otra manera de hacerlo, dado que deseo hacer consultas en todas las direcciones, por ejemplo:

$user->plans() (attaching the students)
$student->plans() (attaching the user)
$plan->users() (attaching the students)
$plan->students() (attaching the users)