【问题标题】:Using Relationship in Jamie Rumbelow MY_model在 Jamie Rumbelow MY_model 中使用关系
【发布时间】:2023-03-16 20:20:01
【问题描述】:

我正在使用 MY_model 和 Codeigniter-base-model。我无法让基本关系正常工作。我搜索了很多,但找到了解决方案。


首先,我有 2 个课程 item_model.phpuser_model.php 都扩展了 MY_Model。

item_model 类中我已经定义了

public $belongs_to = array( 'user' => array( 'model' => 'user_model') );

user_model

public $has_many = array( 'items' => array( 'model' => 'item_model') );

现在,当我调用时在控制器中

$item_details = $this->item_model->with('user')->find_by_id($item_id);

我正在获取$item_details 的正确数据,但我无法从“用户”关系中获取信息。 $item_details->user_id->username;.

我收到以下错误

消息:试图获取非对象的属性

表是标准的

users table has id, username, ...
item table has id, user_id, title...

user_id is is setUp as FK to users.id.

请帮忙。

【问题讨论】:

  • find_by_id 方法是什么?
  • 感谢@JamieRumbelow 的回复。我已经在 MY_model 中编写了自己的函数,您能否告诉我这应该如何工作?
  • 那么,您是否使用内置的finder 方法来获取数据?如果不是,则不会调用观察者,因此没有适当地选择关系。恐怕我需要查看一些代码来帮助你。
  • P.S.不要直接编辑 MY_Model,创建一个 Base_Model 类或从 MY_Model 扩展的东西。如果你以后想更新 MY_Model 会很痛苦。
  • 知道了,我也这样做了。谢谢。

标签: php codeigniter relationship has-many belongs-to


【解决方案1】:

如果你查看相关()方法的源代码,你会发现这段代码:

if (is_string($value))
        {
            $relationship = $value;
            $options = array( 'primary_key' => $value . '_id', 'model' => $value . '_model' );
        }
        else
        {
            $relationship = $key;
            $options = $value;
        }

我查了源码,如果你用数组来定义模型,你也需要定义'primary_key',文档中没有这个。

'primary_key' 表示这个表的哪个外键链接我的primary_key。

public $belongs_to = array( 'user' => array( 'model' => 'user_model','primary_key'=>'user_id') );

会更正确。

【讨论】:

    【解决方案2】:

    $item_details->user_id->username; 不应该是$item_details->user->username;吗?

    您的用户表也称为userusers?你在这里告诉它叫它user

    public $belongs_to = array( 'user' => array( 'model' => 'user_model') );
    

    【讨论】:

    • 是的,表名是users。我试过$item_details->user->username; 没用,这给出了两个错误。 Severity: Notice Message: Undefined property: stdClass::$user Line Number: 5 A PHP Error was encountered Severity: Notice Message: Trying to get property of non-object
    • 这能回答你的问题吗?如果是这样,您可以将其标记为这样吗?
    猜你喜欢
    • 2013-02-17
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多