我有一个多对多关系,我用一个交集表解决了。因此,表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
我把我们现在正在谈论的部分放在一个红色框中。
现在,我的后端API中有以下代码行:
$permittedTables = extensiontables_registry::findMany($ids)->pluck('extensiontable_name')->toArray();
为了简短起见,$ids
包含“ ad_groups”中的所有ID。这些是我从预想的工作中获得的。根据我的日志,$ids
包含以下值/ id:
[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',
)
因此,代码片段没有执行我想要的操作。它应该只获取那些扩展名的名称,这些扩展名具有与存在于我上面的inputarray中的ID相同的extensiontables_registryxad_groups中的相同记录中的ID。所以我目前期望的结果是:
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 /雄辩方法的信息的信息,我将非常感谢^^如果您需要更多信息,请立即询问:)
我认为您觉得事情有些混乱。
此查询的作用:
$permittedTables = extensiontables_registry::findMany($ids)->pluck('extensiontable_name')->toArray();
正在访问extensiontables_registry
表并获取与您发送的$ids
相同数组的记录。
但是它将NOT考虑与extensiontables_registryxad_groups
表的关系因为您没有在查询中明确指定它。”>
您应该添加的是has('relationship name')
,它获取该模型的记录,在您的情况下relationship name'
,该模型在Ad_groups
中仅具有对应的外键
因此,在这种情况下,查询将如下所示:
$permittedTables = extensiontables_registry::has('Ad_groups')->pluck('extensiontable_name')->toArray();
您可以使用'newPivotQuery'方法为数据透视表创建新的查询构建器: