php - relacionadas - obteniendo el valor de una columna de tabla pivote adicional laravel
pivot laravel (2)
Cuando se utilizan relaciones de Muchos a Muchos con Eloquent, el modelo resultante obtiene automáticamente un atributo
pivot
asignado.
A través de ese atributo puede acceder a las columnas de la tabla dinámica.
Aunque de forma predeterminada solo hay claves en el objeto pivote.
Para colocar sus columnas allí también, debe especificarlas al definir la relación:
return $this->belongsToMany(''Role'')->withPivot(''foo'', ''bar'');
Si necesita más ayuda en la tarea de configurar las relaciones con Eloquent, hágamelo saber.
Editar
Para consultar el precio haz esto
$model->problems()->where(''phone_problem'', $problem->id)->first()->pivot->price
Tengo un phone_models, phone_problems y una tabla dinámica phone_model_phone_problem. La tabla dinámica tiene una columna adicional ''precio''.
Modelo de teléfono:
class PhoneModel extends /Eloquent
{
public function problems()
{
return $this->belongsToMany(''RL/Phones/Entities/PhoneProblem'')->withPivot(''price'');
}
}
Problema telefónico:
class PhoneProblem extends /Eloquent
{
public function models()
{
return $this->belongsToMany(''PhoneModel'')->withPivot(''price'');
}
}
Lo que intento hacer es obtener el precio de un teléfono específico con un problema específico.
Así es como lo tengo ahora, pero siento que Laravel tiene una función Eloquent incorporada que no puedo encontrar para hacer esto de una manera mucho más simple:
$model = $this->phoneService->getModelFromSlug($model_slug);
$problem = $this->phoneService->getProblemFromSlug($problem_slug);
todo lo que hace es seleccionar el modelo específico y el problema de su babosa.
entonces lo que hago es con esas credenciales obtengo el precio así:
$row = DB::table(''phone_model_phone_problem'')
->where(''phone_model_id'', ''='', $model->id)
->where(''phone_problem'', ''='', $problem->id)
->first();
así que ahora puedo obtener el precio como
$row->price
pero siento que debe haber una manera mucho más fácil y más ''Laravel'' de hacer esto.
Para obtener datos de la tabla dinámica:
$price = $model->problems()->findOrFail($problem->id, [''phone_problem''])->pivot->price;
O si tiene muchos registros con precios diferentes:
$price = $model->problems()->where(''phone_problem'', $problem->id)->firstOrFail()->pivot->price;
Adicionalmente.
Para actualizar los datos en el pivote puedes ir a NEW WAY :
$model->problems()->sync([$problemId => [ ''price'' => $newPrice] ], false);
Donde el segundo parámetro se establece en falso, significa que no se separan todos los demás modelos relacionados.
O ve a la vieja usanza
$model->problems()->updateExistingPivot($problemId, [''price'' => $newPrice]);
Y te recuerdo:
Para borrar :
$model->problems()->detach($problemId);
Para crear nuevo:
$model->problems()->attach($problemId, [''price'' => 22]);
Ha sido probado y demostrado que funciona en Laravel 5.1 Leer más.