'where' 条件在 has_many_through 在 kohana
'where' condition in has_many_through in kohana
我有两个模型疾病和症状:
生病
class Model_Illness extends ORM {
//protected $_db_group = 'default2';
protected $_table_name = 'illnesses';
protected $_has_many = array(
'symptoms' => array(
'through' => 'symptoms_illnesses',
'foreign_key' => 'illness_id',
)
);
症状
class Model_Symptom extends ORM {
//protected $_db_group = 'default2';
protected $_table_name = 'symptoms';
protected $_has_many = array(
'illnesses' => array(
'through' => 'symptoms_illnesses',
'foreign_key' => 'symptom_id',
)
);
逻辑是疾病可能有很多症状,症状可能有很多疾病。所以这两个有中间 table symptoms_illnesses
存储相互关联的疾病和症状的 ID。
最后是我的任务:我必须通过症状来寻找疾病。我在数组中发送症状 id,然后应该得到只有这些症状的疾病。我尝试了以下功能:
public function bySymp($symps){
$res = array();
$objs = ORM::factory('Illness')->join('symptoms_illnesses')
->on('symptoms_illnesses.illness_id', '=', 'illness.id');
foreach($symps as $s){
$objs = $objs->where('symptoms_illnesses.symptom_id', '=', $s);
}
foreach($objs->find_all() as $o){
$res[] = $o;
}
return $res;
}
它 returns 没什么,当我在数组中放置多个值时。我也试过 $objs = $this->where('symptom_id', 'IN', $symptom_ids);
它像 'OR' 条件一样工作,但我必须准确输出在症状 ID 数组中有症状的疾病。
我认为您需要进行多个联接,每个符号一个。但是快速浏览一下 Kohana 文档就会发现,它不允许在查询中使用别名,因此构造一个 WHERE
子句是 difficult/impossible.
我认为开箱即用的唯一方法是首先找到所有疾病,然后通过 has()
检查所需的症状。
$res = array();
$objs = ORM::factory('Illness')->find_all();
foreach ($objs as $o) {
if ($o->has('symptom', $symps)) {
$res[] = $o;
}
}
return $res;
但我已经有一段时间没有使用 Kohana 了,可能会忽略一些东西。
我有两个模型疾病和症状:
生病
class Model_Illness extends ORM {
//protected $_db_group = 'default2';
protected $_table_name = 'illnesses';
protected $_has_many = array(
'symptoms' => array(
'through' => 'symptoms_illnesses',
'foreign_key' => 'illness_id',
)
);
症状
class Model_Symptom extends ORM {
//protected $_db_group = 'default2';
protected $_table_name = 'symptoms';
protected $_has_many = array(
'illnesses' => array(
'through' => 'symptoms_illnesses',
'foreign_key' => 'symptom_id',
)
);
逻辑是疾病可能有很多症状,症状可能有很多疾病。所以这两个有中间 table symptoms_illnesses
存储相互关联的疾病和症状的 ID。
最后是我的任务:我必须通过症状来寻找疾病。我在数组中发送症状 id,然后应该得到只有这些症状的疾病。我尝试了以下功能:
public function bySymp($symps){
$res = array();
$objs = ORM::factory('Illness')->join('symptoms_illnesses')
->on('symptoms_illnesses.illness_id', '=', 'illness.id');
foreach($symps as $s){
$objs = $objs->where('symptoms_illnesses.symptom_id', '=', $s);
}
foreach($objs->find_all() as $o){
$res[] = $o;
}
return $res;
}
它 returns 没什么,当我在数组中放置多个值时。我也试过 $objs = $this->where('symptom_id', 'IN', $symptom_ids);
它像 'OR' 条件一样工作,但我必须准确输出在症状 ID 数组中有症状的疾病。
我认为您需要进行多个联接,每个符号一个。但是快速浏览一下 Kohana 文档就会发现,它不允许在查询中使用别名,因此构造一个 WHERE
子句是 difficult/impossible.
我认为开箱即用的唯一方法是首先找到所有疾病,然后通过 has()
检查所需的症状。
$res = array();
$objs = ORM::factory('Illness')->find_all();
foreach ($objs as $o) {
if ($o->has('symptom', $symps)) {
$res[] = $o;
}
}
return $res;
但我已经有一段时间没有使用 Kohana 了,可能会忽略一些东西。