/ / Jak uzyskać połączenie wielu rekordów w jedną tabelę lub użyć funkcji zawierać z warunkami? - mysql, cakephp, dołącz

Jak połączyć wiele rekordów w jedną tabelę lub użyć warunków? - mysql, cakephp, join

Używam cakePHP 2.6.4.
Mam dwie tabele AgentChat i AgentChatMember.
AgentChat ma wiele AgentChatMember,
AgentChatMember należy do AgentChat.

AgentChat mieć: id, team_id, agent_chat_member_count pola.
AgentChatMember mieć: id, agent_chat_id, user_id pola.

chcę znaleźć AgentChat przez chat_team_id i agent_chat_member_count,
i AgentChatMember jak zawierają z user_id warunki.

    $options["contain"] = array("AgentChatMember");
$options["conditions"]["AgentChat.agent_chat_member_count"] = count($user_ids);
$options["conditions"]["AgentChat.chat_team_id"] = $chat_team_id;

$res = $this->AgentChat->find("first", $options);

i $res jest:

     "AgentChat" => array(
"id" => "1",
"agent_message_count" => "0",
"agent_chat_member_count" => "2",
"chat_team_id" => "14",
"created" => "2015-05-06 09:52:31",
"updated" => "2015-05-06 09:52:31"
),
"AgentChatMember" => array(
(int) 0 => array(
"id" => "1",
"agent_chat_id" => "1",
"user_id" => "26",
"created" => "2015-05-06 09:52:31"
),
(int) 1 => array(
"id" => "2",
"agent_chat_id" => "1",
"user_id" => "21",
"created" => "2015-05-06 09:52:31"
)
)

W ten sposób dostaję to, czego chcę, z wyjątkiem faktu, że nie mogę ustawić user_id warunek do AgentChatMember lubię to: $options["conditions"]["AgentChatMember.user_id"] = $user_ids;

Kiedy używam złączeń zamiast zawierać, mogę ustawić warunki user_id, ale otrzymuję taki wynik:

(int) 0 => array(
"AgentChat" => array(
"id" => "1",
"agent_message_count" => "0",
"agent_chat_member_count" => "2",
"chat_team_id" => "14",
"created" => "2015-05-06 09:52:31",
"updated" => "2015-05-06 09:52:31"
),
"AgentChatMember" => array(
"id" => "2",
"agent_chat_id" => "1",
"user_id" => "21",
"created" => "2015-05-06 09:52:31"
)
),
(int) 1 => array(
"AgentChat" => array(
"id" => "1",
"agent_message_count" => "0",
"agent_chat_member_count" => "2",
"chat_team_id" => "14",
"created" => "2015-05-06 09:52:31",
"updated" => "2015-05-06 09:52:31"
),
"AgentChatMember" => array(
"id" => "2",
"agent_chat_id" => "1",
"user_id" => "26",
"created" => "2015-05-06 09:52:31"
)
),
...

Czy można połączyć wiele rekordów w jedną tabelę lub zawierać warunki?
Jak mogę to osiągnąć?

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz przejść warunki do zawierania: -

$res = $this->AgentChat->find(
"first",
array(
"contain" => array(
"AgentChatMember" => array(
"conditions" => array(
"AgentChatMember.user_id" => $userIds
)
)
),
"conditions" => array(
"AgentChat.agent_chat_member_count" => count($userIds),
"AgentChat.chat_team_id" => $chatTeamId
)
)
);

Tak na marginesie, naprawdę powinieneś być wielbłądem w swoich zmiennych w CakePHP. Zobacz Standardy kodowania w dokumentacji.