【问题标题】:Laravel one-to-many relationship with different column than primary keyLaravel 与主键不同的列的一对多关系
【发布时间】:2020-01-15 06:41:02
【问题描述】:

我有以下两个表:

account:

+--------------------------+---------------------+------+-----+---------+-------+
| Field                    | Type                | Null | Key | Default | Extra |
+--------------------------+---------------------+------+-----+---------+-------+
| id                       | varchar(25)         | NO   | PRI |         |       |
| name                     | varchar(191)        | NO   | UNI | NULL    |       |
| status                   | tinyint(3) unsigned | NO   |     | NULL    |       |
| active                   | tinyint(3) unsigned | NO   |     | NULL    |       |

project:
+-----------------------+------------------+------+-----+---------+----------------+
| Field                 | Type             | Null | Key | Default | Extra          |
+-----------------------+------------------+------+-----+---------+----------------+
| id                    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| client_code           | varchar(191)     | NO   |     | NULL    |                |
| tags                  | varchar(500)     | YES  |     | NULL    |                |
| project_id            | int(11)          | NO   |     | NULL    |                |
| file_name             | varchar(191)     | NO   |     | NULL    |                |
| total_records         | int(11)          | NO   |     | NULL    |                |

帐户和项目之间存在一对多的关系。

projects 表中的外键被命名为 account_code 而不是 account_id

问题是重要的项目标识符列是project_id,而不是项目表中的id

这是我的帐户模型:

public function projects() {
    return $this->hasMany('App\Project', 'account_code');
}

项目模型:

public function account() {
    return $this->belongsTo('App\Account', 'account_code', 'project_id');
}

我在项目表中有一行:

 id: 9
 account_code: 0011T00002K95MLQAZ
 tags: cpi|test|dmf
 project_id: 312
 file_name: conf_matrix_dev_1579064650.tsv
 total_records: 19

我尝试检索 project_id 312 所属的 account 详细信息。

$project = \App\Project::where('project_id', 312)->get();
dd($project->account->name);

这会引发异常:

Property [account] does not exist on this collection instance

还有这个:

$project = \App\Project::find(312);

这试图通过id 字段而不是project_id 进行查看。

如何在不编写查询的情况下解决这个问题?

【问题讨论】:

    标签: php laravel eloquent eloquent-relationship


    【解决方案1】:

    这里的问题是 get 正在检索你一个集合而不是一个实例。你可以使用

    $project = \App\Project::where('project_id', 312)->first();
    

    相反,这应该可以解决问题。

    希望对您有所帮助。这里公开了一些其他的解决方案:Property [title] does not exist on this collection instance

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 2020-12-16
      • 2014-07-30
      • 2020-01-08
      • 2019-10-15
      • 2019-02-09
      • 2017-11-16
      • 2018-03-16
      相关资源
      最近更新 更多