在子关联表中使用contain的cakephp 3

在子关联表中使用contain的cakephp 3,php,mysql,cakephp,cakephp-3.0,Php,Mysql,Cakephp,Cakephp 3.0,我有4个表,建议,出价,用户和驱动程序。提案有很多出价,出价有很多用户,最后驱动程序属于用户 我试图做的是获取提案1的所有投标,其中应显示提案名称、投标编号、投标用户详细信息,包括驱动程序表中包含用户某些特定详细信息的字段 我的模式如下: CREATE TABLE `proposals` ( `id` int(11) NOT NULL, `email` varchar(200) NOT NULL, `item` int(11) NOT NULL,

我有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']
]);

太棒了,看起来比我做的更干净。谢谢,伙计,回答得好。谢谢