У меня есть две таблицы:
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
Я попытался получить account
деталь, к которой относится project_id 312
.
$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
.
Как я могу решить эту проблему без необходимости писать запрос?