Как обновить отношение “один ко многим” в Laravel?(не могу найти это в документах)
Вопрос
<?php
class User extends Eloquent {
public function tickets()
{
return $this->hasMany('Tickets')
}
}
class Tickets extends Eloquent {
public function User()
{
return $this->belongTo('User')
}
}
//and how to update a Ticket that belongs To User?
// and this dosen't work...Who can tell me the reason ,thanks !
$ticket = User::find(1)->tickets()->where('type','sometype')->get();
$ticket.update(array('status' => 0));
Решение
Тот Самый update()
запрос довольно четко задокументирован в официальные документы:
User::find(1)->tickets()->where('type','sometype')->update(array('status' => 0));
Я подозреваю, что проблема, с которой вы столкнулись, заключается в том, что запрос get()` возвращается множественный записи.Чтобы ваш запрос сработал, вам нужно будет обработать возвращаемое значение как коллекцию записей if, затем выполнить итерацию и оперировать с каждой записью по отдельности.
$tickets = User::find(1)->tickets()->where('type','sometype')->get();
foreach ($tickets as $ticket) {
$ticket->update(array('status' => 0));
}
Обратите внимание, что правильный синтаксис для вызова метода Eloquent требует предшествующей стрелки ->
– нет точка (.
).
$record.update(array('foo' => 'bar')); # Incorrect
$record->update(array('foo' => 'bar')); # CORRECT!
Обновить:
Названия моделей всегда должны быть единственное число, нет множественное число.Следовательно, Ticket
модель должна быть определена следующим образом:
class Ticket extends Eloquent { // `Ticket`, not `Tickets`
public function User()
{
return $this->belongTo('User')
}
}
Не связан с StackOverflow