CakePHP 3 с использованием содержат в подчиненной таблице

0

У меня есть 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);

Любая помощь будет высоко оценен.

Теги:
cakephp
cakephp-3.0

2 ответа

0

вы также можете использовать точечную нотацию, чтобы пересечь отношения

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

https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#eager-loading-associations-via-contain

  • 0
    Фантастика, это выглядит чище, чем, как я это сделал. Спасибо друг.
0

Я исправил это следующим образом:

 $proposal = $this->Proposals->get($id, [
        'contain' => ['Bids' => ['Users' => ['Drivers']]]

    ]);
  • 0
    Хороший ответ. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню