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 № 1Moż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.