У меня есть три таблицы, и я использую участников, чтобы найти все задачи, которые они выполнили.
class Task extends BaseModel {
static $has_many = array(
array('members', 'through' => 'member_tasks'),
array('member_tasks', 'class_name' => 'Member_task')
);
class Member extends BaseModel {
static $has_many = array(
array('tasks', 'through' => 'member_tasks'),
array('member_tasks', 'class_name' => 'Member_task')
);
class Member_task extends BaseModel {
static $belongs_to = array(
'member', 'task'
);
если я позвоню $tasks = $member->myTasks()
public function myTasks()
{
return $this->tasks;
}
Я могу получить элементы из таблицы задач, относящиеся к этому участнику. Тем не менее, у меня есть is_completed
флаг, который находится в таблице Member_tasks. Как мне это схватить?
Если у вас есть член, ассоциации доступны, так что вы можете просто получить их через $member->tasks
Нет необходимости в функции.
То же самое касается таблицы между ними, так что вы бы
foreach($member->member_tasks as member_task){
//now you have a member_task object
//use $member_task->is_completed
}
Вам не нужно использовать определения «впадины», особенно если вы хотите посмотреть на флаги ассоциации. Просто «вручную» зайдите в таблицу соединений, посмотрите записи и затем получите задачи.
Если вы хотите выполнить задачу в этом member_task, вам, вероятно, нужно определить и эту ассоциацию, поскольку она еще не выглядит так, как будто у вас есть?
Других решений пока нет …