cakephp3在子关联表中使用contain

k5hmc34c  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(468)

我有4个表,建议,投标,用户和驱动程序。提案有许多出价和出价有许多用户,最后司机属于用户。
我试图做的是得到所有投标方案1,其中应显示建议名称,投标编号,用户详细资料谁出价,包括司机表中的一些具体细节的用户字段。
我的模式如下:

  1. CREATE TABLE `proposals` (
  2. `id` int(11) NOT NULL,
  3. `email` varchar(200) NOT NULL,
  4. `item` int(11) NOT NULL,
  5. `desc` varchar(100) NOT NULL,
  6. `sess` varchar(255) NOT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  8. CREATE TABLE `bids` (
  9. `id` int(11) NOT NULL,
  10. `proposal_id` int(11) NOT NULL,
  11. `user_id` int(11) NOT NULL,
  12. `amount` double NOT NULL,
  13. `session_code` varchar(255) NOT NULL
  14. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  15. CREATE TABLE `users` (
  16. `id` int(11) NOT NULL,
  17. `First_Name` varchar(200) DEFAULT NULL,
  18. `Last_Name` varchar(200) DEFAULT NULL,
  19. `role` varchar(200) NOT NULL,
  20. `Mobile_No` int(11) DEFAULT NULL,
  21. `Membership_Start` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  22. `Address` varchar(255) DEFAULT NULL,
  23. `Post_Code` varchar(255) DEFAULT NULL,
  24. `email` varchar(50) DEFAULT NULL,
  25. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  26. CREATE TABLE `drivers` (
  27. `id` int(11) NOT NULL,
  28. `user_id` int(11) NOT NULL,
  29. `verified` varchar(255) NOT NULL,
  30. `dealno` varchar(255) NOT NULL
  31. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

下面是我正在使用的失败代码-我知道我弄错了:

  1. $query = $this->Bids->find()
  2. ->contain([
  3. "Users",
  4. "Drivers",
  5. "Proposals"
  6. ])
  7. ->matching("Proposals", function($q){
  8. return $q->where(["proposals.id" => $id ]);
  9. });
  10. $bid = $this->paginate($query);

任何帮助都将不胜感激。

k5ifujac

k5ifujac1#

我用以下方法解决了这个问题:

  1. $proposal = $this->Proposals->get($id, [
  2. 'contain' => ['Bids' => ['Users' => ['Drivers']]]
  3. ]);
hm2xizp9

hm2xizp92#

也可以使用点表示法遍历关系

  1. $proposal = $this->Proposals->get($id, [
  2. 'contain' => ['Bids.Users.Drivers']
  3. ]);

https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#eager-通过包含加载关联

相关问题