如何从其他数组向对象添加属性?

时间:2019-07-16 20:16:47

标签: php mysql codeigniter codeigniter-3

在我的数据库中,我有3个表:

国家/地区:

enter image description here

团队:

enter image description here

匹配项:

enter image description here

我需要在视图中显示团队和国家/地区名称。

在控制器中,我得到了一场比赛并将其转移到视图:

Index/Match

我有ID所在的国家/地区和球队,但我不知道该如何命名。

我应该联接表还是在数据库中添加3列带有名称的列?

当我尝试连接表时:

    public function index() {
        $data = array();

        $q = $this->db->get('matches');
        $matches = $q->result();
        $data['matches'] = $matches;

        $this->load->view('matches/index', $data);
    }

结果我有:

$this->db->select('*');
$this->db->from('matches');
$this->db->join('countries', 'country.id = matches.country_id');
$this->db->join('teams', 'teams.id = matches.team_home_id');
$query = $this->db->get();

名称被覆盖。也许我的查询有误?

如果我在添加第二个选项之前选择了第二个选项,则必须输入名称,但我不知道如何操作。

在控制器中,我有:

array(1) { [0]=> object(stdClass)#24 (8) { ["id"]=> string(1) "1" ["country_id"]=> string(1) "1" ["league"]=> string(4) "test" ["team_home_id"]=> string(1) "1" ["team_away_id"]=> string(1) "3" ["date"]=> string(10) "15-04-2019" ["time"]=> string(5) "12:00" ["name"]=> string(5) "test1" } }

哪个选项会更好?请提供一些提示。

1 个答案:

答案 0 :(得分:2)

不要不要 “在数据库中添加3列带有名称的列” ,因为这将违反规范化规则。 我认为为每列使用别名都可以完成工作:

$this->db->select('matches.*, home_team.name home_team_name, away_team.name away_team_name, country.name country_name'); // use alias for each away/home team name & country name to avoid ambiguous 'name' column
$this->db->from('matches');
$this->db->join('country', 'country.id = matches.country_id'); // changed from countries to country
$this->db->join('teams home_team', 'home_team.id = matches.team_home_id'); // use alias for the home team table
$this->db->join('teams away_team', 'away_team.id = matches.team_away_id'); // also use alias for the away team table
$query = $this->db->get();

我已将countries表名更改为country,如果我输入错了,可以将其恢复。