У меня есть функция, которая отправляет групповые сообщения, но мне нужно получить доступ к списку контактов из определенной группы. Я попробовал EagerLoading и цепочку, но не могу заставить его работать. Таким образом, в функции sendCommunications()
, эта линия вызывает у меня вопросы:Доступ к моделям из другого отношения «многие ко многим» в Laravel
$contacts = $message->group->contact()->select(array('email_address'));
Сообщение об ошибке я получаю из командной строки:
Call to undefined method Illuminate\\Database\\Eloquent\\Collection::contact()
И это то, что я до сих пор : ФУНКЦИИ
CONTROLLER:
public static function sendCommunications()
{
$queued_messages = QueuedMessage::with(array('message' => function($query)
{
$query->where('distribution_date_time', '<=', DB::raw('NOW()'));
}))->get();
foreach ($queued_messages as $queued)
{
$message = $queued->message;
$contacts = $message->group->contact()->select(array('email_address'));
foreach ($contacts as $contact)
{
Message::send($message->email_title.'\n'.$message->email_body, $contact->email_address, $message->department->short_name);
}
$queued->delete();
}
}
МОДЕЛИ:
QueuedMessage:
class QueuedMessage extends Eloquent
{
protected $primaryKey = 'queued_message_pk';
protected $table = 'queued_messages';
public $timestamps = false;
public function message()
{
return $this->belongsTo('Communication', 'message_fk');
}
}
Связь:
class Communication extends Eloquent
{
protected $primaryKey = 'message_pk';
protected $table = 'messages';
public $timestamps = false;
public function establishment()
{
return $this->belongsTo('Establishment', 'establishment_fk');
}
public function group()
{
return $this->belongsToMany('Group', 'messages_groups', 'message_fk', 'group_fk');
}
}
Группа:
class Group extends Eloquent
{
protected $primaryKey = 'group_pk';
protected $table = 'groups';
public $timestamps = false;
public function department()
{
return $this->belongsTo('Department', 'department_fk');
}
public function contact()
{
return $this->belongsToMany('Contact', 'contacts_groups', 'group_fk', 'contact_fk');
}
public function message()
{
return $this->belongsToMany('Communication', 'messages_groups', 'group_fk', 'message_fk');
}
}
Контакт:
class Contact extends Eloquent
{
protected $primaryKey = 'contact_pk';
protected $table = 'contacts';
public $timestamps = false;
public function department()
{
return $this->belongsTo('Department', 'department_fk');
}
public function group()
{
return $this->belongsToMany('Group', 'contacts_groups', 'contact_fk', 'group_fk');
}
}