У меня есть две таблицы: Coretable и extensiontable_it c. Они имеют отношение 1-n, extensiontable_it c может иметь N записей, ссылающихся на 1 запись в coretable.
Если все правильно понять, я узнал здесь Laravel - красноречивое «Имеет», «С "," WhereHas "- Что они означают?
, что model::with('relatedModel')->get()
может принести мне все записи из coretable и extensiontable_it c везде, где ссылки на coretablerecrec ссылаются на записи extensiontable_it c.
Однако, когда я применяю это к своему коду, как здесь:
$join = coretable::with('extensiontable_itc')->get();
log::info($join);
я получаю следующую ошибку:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'extensiontable_itc.extensiontable_itc' in 'where clause' (SQL: select * from `extensiontable_itc` where `extensiontable_itc`.`extensiontable_itc` in (1))
Насколько я понимаю, это выглядит для столбца "extensiontable_it c" в моей таблице extensiontable_it c. Это, конечно, не может работать, но я не понимаю, почему это происходит? Внешние ключи на месте в моей БД, и соответствующие модели должны быть в порядке, вот их код:
coretable. php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class CoreTable extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'coretable';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'Internal_key'
];
/**
* Many-To-Many relationship with User-Model.
*/
public function extensiontable_itc()
{
return $this->hasOne('App\extensiontable_itc', 'extensiontable_itc');
}
public function inaccessibletable()
{
return $this->hasOne('App\inaccessibletable', 'inaccessibletable');
}
}
extensiontable_it c. php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class extensiontable_itc extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'extensiontable_itc';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'description'
];
/**
* Many-To-Many relationship with User-Model.
*/
public function coretable()
{
return $this->hasOne('App\coretable', 'coretable');
}
}
А вот обзор внешних ключей в моей БД:
+------------------------------------+-----------------------------+--------------------------------------+--------------------------+------------------------+
| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+------------------------------------+-----------------------------+--------------------------------------+--------------------------+------------------------+
| ad_usersxad_groups | Ad_user_id | fk_ad_groupxad_user | ad_users | id |
| ad_usersxad_groups | Ad_group_id | fk_ad_userxad_group | ad_groups | id |
| extensiontables_registryxad_groups | ad_group_id | fk_ad_groupxextensiontables_registry | ad_groups | id |
| extensiontables_registryxad_groups | extensiontables_registry_id | fk_extensiontables_registryxad_group | extensiontables_registry | id |
| extensiontable_itc | coretable_id | fk_extensiontable_itc_coretable | coretable | id |
| inaccessibletable | coretable_id | fk_inaccessibletable_coretable | coretable | id |
+------------------------------------+-----------------------------+--------------------------------------+--------------------------+------------------------+