with wherepivot updateexistingpivot update tabla pivote intermediate data attach actualizar mysql laravel laravel-5 eloquent

mysql - wherepivot - Cómo actualizar una tabla dinámica usando Eloquent en laravel 5



updateexistingpivot laravel (3)

Soy nuevo en laravel. Estoy trabajando en una aplicación laravel 5 y estoy atrapado aquí. Tengo 2 modelos como tal:

class Message extends Eloquent{ public function user() { return $this->belongsTo(''App/User'', ''from''); } public function users() { return $this->belongsToMany(''App/User'')->withPivot(''status''); } } class User extends Eloquent { public function messages() { return $this->hasMany(''App/Message'', ''from''); } public function receive_messages() { return $this->belongsToMany(''App/Message'')->withPivot(''status''); } }

Existe una relación de muchos a muchos entre Mensaje y Usuario que me da una tabla dinámica como tal:

Table Name: message_user Colums: message_id user_id status

Tengo una consulta SQL como tal:

update message_user set status = 1 where user_id = 4 and message_id in (select id from messages where message_id = 123)

¿Cómo puedo traducir esta consulta al equivalente de Laravel?


El siguiente código resolvió mi problema:

$messages = Message::where(''message_id'', $id)->get(); foreach($messages as $message) $message->users()->updateExistingPivot($user, array(''status'' => 1), false);


Para actualizar su tabla dinámica, puede usar el método updateExistingPivot.


Puede usar una de estas dos funciones, sync() attach() y la deferencia en pocas palabras es que Sync obtendrá array como su primer argumento y lo sincronizará con la tabla dinámica (eliminar y agregar las claves pasadas en su matriz) lo que significa si obtuviste 3,2,1 como valor en tu tabla de unión, y pasaste la sincronización con los valores de 3,4,2, la sincronización automáticamente eliminará el valor 1 y agregarás el valor 4 por ti. donde Attach tendrá un valor de ID único

El GIST: si desea agregar valores extra a su tabla de unión, páselo como segundo argumento a Sync() manera:

$message = Messages::where(''id'',''123''); $user = User::where(''id'',''4''); // using ->attach for single message $user->message()->attach($message->id,[''status'' => 1 ]); // using ->sync for multiple messages $message2 = Messages::where(''id'',''456''); // for testing $user->message()->sync([$message->id =>[''status'' => 1 ],$message2->id =>[''status'' => 1 ] ]);