【问题标题】:CodeIgniter & Datamapper: One to many RelationshipCodeIgniter & Datamapper:一对多关系
【发布时间】:2014-05-18 04:28:48
【问题描述】:

我正在尝试在 休息室城市 之间建立一对多的关系 因此,一个休息室可以在许多城市 - “肯德基” => 伦敦、巴黎、马德里等 出于我使用 DataMapper 的目的,但手册有点混乱,我收到一个错误 - Table 'databasename.cities_lounges' 不存在,但是有一个名为 lounge_cities。当我将其更改为 citys_lounges 时,它给了我不同的错误,例如描述 cities_lounges

这是 Lounge_cities 表包含的内容:“id, lion_id(INT, UNSIGNED), city_id(INT,UNSIGNED)

这是我的模型:

<?php

 class Lounge_model extends DataMapper
 {
public function __construct()
{
    parent::__construct();
}

var $table = 'lounges';

var $has_one = array('city_model');


  }

<?php

  class City_model extends DataMapper
  { 
public function __construct()
{
    parent::__construct();
}

var $table = 'cities';

var $has_many = array('lounge_model');

   }

这是我试图让它成为我的控制器的功能:

public function id($id)
{
    $lounge = new lounge_model();
    $lounge->where('id', $id)->get();

    $relationshiptest = $lounge->city_model->get();
    var_dump($relationshiptest);
      }

这就是我关注的:http://datamapper.wanwizard.eu/pages/accessingrelations.html

有人可以帮助我,但不要将我指向手册,因为我很难理解...?干杯

【问题讨论】:

  • 看来您需要建立一个数据库或将其指向正确的位置。 Table 'databasename.cities_lounges' doesn't exist 正在一个名为 databasename 的数据库中查找您的表
  • 不,不是这样的 :( 也许我没有正确称呼它

标签: php codeigniter datamapper codeigniter-datamapper


【解决方案1】:

你有一个一对多的关系,所以你只需要在你的“休息室”数据库表中添加一个列“city_model_id”......不需要“休息室_城市”表(应该是“ city_lounges”根据“表命名规则”:

连接表必须以它要连接的两个表名命名,按字母顺序,用下划线 (_) 分隔。例如,用户和国家的连接表是国家用户。 (source)

【讨论】:

  • 但是等一下它不会再工作了,因为如果休息室在许多城市,那么 city_id 列必须为一个城市使用多个 id,这将无法正常工作?跨度>
  • 在这种情况下,您没有一对多关系,而是需要关系表的多对多关系。相应地设置您的模型(两者都为 $has_many),检查您的命名约定,它会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多