У меня есть отношение «многие ко многим», которое я разрешил с помощью таблицы пересечений. Таким образом, таблицы A и B связаны через AxB. A и AxB - это 1-n, а B и AxB - 1-n.
Фактические имена таблиц:
table A = extensiontables_registry
table B = ad_groups
table AxB = extensiontables_registryxad_groups
Здесь вы можете увидеть логическую модель данных: https://imgur.com/MNpC3XV
Я положил часть, которую мы говорим прямо сейчас в красную рамку.
Теперь у меня есть следующая строка кода в моем backend-API:
$permittedTables = extensiontables_registry::findMany($ids)->pluck('extensiontable_name')->toArray();
Короче говоря, $ids
содержит все идентификаторы из «ad_groups». Я получил их из выборки, которая работает как задумано. $ids
содержит следующие значения / идентификаторы согласно моим журналам:
[1,2,3,4,5,6,7,8,9,10,12]
Теперь extensiontables_registryxad_groups в настоящее время выглядит так:
select * from extensiontables_registryxad_groups;
+-----------------------------+-------------+------------+------------+
| extensiontables_registry_id | ad_group_id | created_at | updated_at |
+-----------------------------+-------------+------------+------------+
| 1 | 8 | NULL | NULL |
| 2 | 8 | NULL | NULL |
+-----------------------------+-------------+------------+------------+
2 rows in set (0.000 sec)
А extensiontables_registry выглядит так:
+----+-----------------------+------------+------------+
| id | extensiontable_name | created_at | updated_at |
+----+-----------------------+------------+------------+
| 1 | extensiontable_itc | NULL | NULL |
| 2 | extensiontable_sysops | NULL | NULL |
| 3 | test | NULL | NULL |
+----+-----------------------+------------+------------+
И теперь проблема в том, что мой кодовый сниппет сверху:
$permittedTables = extensiontables_registry::findMany($ids)->pluck('extensiontable_name')->toArray();
возвращает мне следующий результат:
array (
0 => 'extensiontable_itc',
1 => 'extensiontable_sysops',
2 => 'test',
)
Итак, кодовый сниппет НЕ делает то, что я хочу это делать. Он должен получать мне только имена тех таблиц расширения, идентификаторы которых существуют в той же записи (ах) в extensiontables_registryxad_groups с идентификаторами из моего входного массива выше. Итак, результат, которого я сейчас ожидал, будет следующим:
array (
0 => 'extensiontable_itc',
1 => 'extensiontable_sysops'
)
Я новичок в laravel и красноречив, поэтому я действительно не знаю, что я сделал не так в моем кодовом сниппете. Я также понятия не имею, что я могу сделать, чтобы все работало так, как задумано ^^
Для полноты картины я покажу вам свои красноречивые модели / классы для такого расположения таблиц, на всякий случай, если вы могли бы нужно:
AD_Group. php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Ad_group extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name'
];
/**
* Hides pivot from return queries.
*
* @var array
*/
protected $hidden = [
'pivot'
];
/**
* Many-To-Many relationship with User-Model.
*/
public function Ad_users()
{
return $this->belongsToMany('App\Ad_user', 'Ad_usersxad_groups', 'Ad_group_id', 'Ad_user_id');
}
public function extensiontables()
{
return $this->belongsToMany('App\extensiontables_registry', 'extensiontables_registryxad_groups');
}
}
extensiontables_registry. php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Extensiontables_Registry extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'Extensiontables_Registry';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'extensiontable_name'
];
/**
* Many-To-Many relationship with User-Model.
*/
public function Ad_groups()
{
return $this->belongsToMany('App\Ad_group', 'extensiontables_registryxad_groups');
}
}
Я был бы очень благодарен, если бы вы могли мне помочь или по крайней мере, дайте мне подсказку, на что обращать внимание, чтобы найти информацию об использовании методов laravel / eloquent соответственно ^^ Если вам нужна дополнительная информация, спросите сразу :)