У меня есть 4 таблицы, предложения, предложения, пользователи и драйверы. В предложениях есть много ставок и ставок, у которых есть много Пользователей, и, наконец, Драйверы принадлежат Пользователям.
То, что я пытаюсь сделать, это получить все ставки для предложения 1, в котором должны быть указаны имя заявки, номер ставки, сведения о пользователе, которые участвуют, включая поля в таблице драйверов, в которых содержатся некоторые конкретные сведения о пользователе.
Моя схема выглядит так:
CREATE TABLE 'proposals' (
'id' int(11) NOT NULL,
'email' varchar(200) NOT NULL,
'item' int(11) NOT NULL,
'desc' varchar(100) NOT NULL,
'sess' varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE 'bids' (
'id' int(11) NOT NULL,
'proposal_id' int(11) NOT NULL,
'user_id' int(11) NOT NULL,
'amount' double NOT NULL,
'session_code' varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE 'users' (
'id' int(11) NOT NULL,
'First_Name' varchar(200) DEFAULT NULL,
'Last_Name' varchar(200) DEFAULT NULL,
'role' varchar(200) NOT NULL,
'Mobile_No' int(11) DEFAULT NULL,
'Membership_Start' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
'Address' varchar(255) DEFAULT NULL,
'Post_Code' varchar(255) DEFAULT NULL,
'email' varchar(50) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE 'drivers' (
'id' int(11) NOT NULL,
'user_id' int(11) NOT NULL,
'verified' varchar(255) NOT NULL,
'dealno' varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
И вот код, который я использую, который терпит неудачу - я знаю, что я ошибаюсь:
$query = $this->Bids->find()
->contain([
"Users",
"Drivers",
"Proposals"
])
->matching("Proposals", function($q){
return $q->where(["proposals.id" => $id ]);
});
$bid = $this->paginate($query);
Любая помощь будет высоко оценен.
вы также можете использовать точечную нотацию, чтобы пересечь отношения
$proposal = $this->Proposals->get($id, [
'contain' => ['Bids.Users.Drivers']
]);
Я исправил это следующим образом:
$proposal = $this->Proposals->get($id, [
'contain' => ['Bids' => ['Users' => ['Drivers']]]
]);