我有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);
任何帮助都将不胜感激。
2条答案
按热度按时间k5ifujac1#
我用以下方法解决了这个问题:
hm2xizp92#
也可以使用点表示法遍历关系
https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#eager-通过包含加载关联