我有一个名为职位的表,在该表中有4个职位
在我的模型函数下面,如果我的布局表有一个位置设置 我试图获得未设置的位置
目前只设置 column_left 和 content_top 。
布局表
问题:从职位表中我如何获得未设置的职位。它应该能够 column_right 和 content_bottom
public function getlayoutpositions($name) {
$this->db->select('*');
$this->db->from('layouts');
$this->db->where('name', $name);
$positions = $this->db->get();
foreach ($positions->result_array() as $layouts) {
$this->db->select('position');
$this->db->from('positions');
$this->db->where('position !=', $layouts['position']);
$query = $this->db->get();
return $query->result_array();
}
}
返回错误只应显示column_right和content_bottom
Array
(
[0] => Array
(
[position] => column_right
)
[1] => Array
(
[position] => content_top
)
[2] => Array
(
[position] => content_bottom
)
)
答案 0 :(得分:2)
在下面的代码中思考,你犯了一个小错误:
foreach ($positions->result_array() as $layouts) {
$this->db->select('position');
$this->db->from('positions');
$this->db->where('position !=', $layouts['position']);
$query = $this->db->get();
return $query->result_array();
}
在上面的代码中,For循环遍历所有布局对象(行)并在$layouts
中为您提供数据。您只检查第一个$layouts
对象并在POSITION表中找到它并返回结果。
您需要为从LAYOUT表中检索到的所有位置创建一个数组。
在For循环中,您应该填充该数组,意味着将$layouts['position']
的值存储在该数组中。
因此,在循环之后,您将获得布局表中存在的所有位置的数组。
现在在For循环之后编写代码:
$this->db->select('position');
$this->db->from('positions');
$this->db->where_not_in('position', /* Pass your array here */ );
$query = $this->db->get();
return $query->result_array();
我认为这有帮助。
答案 1 :(得分:1)
立即行动
控制器功能
public function index() {
$positions = $this->getpositions($this->getlayoutpositions($this->router->class));
echo '<pre>';
print_r($positions);
echo '</pre>';
}
模型功能
public function getpositions($positions = array()) {
$this->db->select('*');
$this->db->from('positions');
foreach ($positions as $position) {
$this->db->where('position !=', $position['position']);
}
$query = $this->db->get();
return $query->result_array();
}
public function getlayoutpositions($name) {
$this->db->select('*');
$this->db->from('layouts');
$this->db->where('name', $name);
$query = $this->db->get();
return $query->result_array();
}
正确的结果
Array
(
[0] => Array
(
[position_id] => 2
[position] => column_right
)
[1] => Array
(
[position_id] => 4
[position] => content_bottom
)
)
答案 2 :(得分:0)
尝试此查询 - 它可以简化那里的事情:
$query = $this->db->query('SELECT * FROM positions LEFT OUTER JOIN layouts ON positions.position = layouts.position WHERE layouts.layout_id IS null');