我正在为我的公司开发应用程序,而且我一直在使用Laravel。我需要在我的用户模型上自引用BelongsToMany关系,以允许用户属于其他用户。 (即AE - 客户)
这是我的代码:
$id = 6;
var_dump( "ID Queried Is: $id.", Sentry::getUser()->clients()->find($id)->toArray() );
Sentry::getUser()->clients()->find($id)
的结果导致问题,因为当我使用关系时,它使用错误的ID搜索相关表。
我可以使用Sentry::getUser()->clients->find($id)
并返回指定了ID的用户,但我无法将任何关系加载到该模型(我很清楚)。
BelongsToMany关系(例如Sentry::getUser()->clients()
)是否通过数据透视表上的主键而不是命名键(client_id
)查询结果集,如果是,我该如何绕过它?
答案 0 :(得分:1)
正如您所看到的,此Sentry::getUser()->clients()->find($id)
的结果非常正确。我的意思是它提取正确的用户,但它select *
所以id
(以及可能的其他常见字段)被覆盖,所以结果有
$client->id; // id of the pivot table
而其他字段是正确的。
所以你可以像这样查询关系:
$client = Sentry::getUser()->clients()->select('users.*')->find($id);
或延迟加载关系(如果你真的需要这个)并使用Collection
find()
方法:
$user = Sentry::getUser()->load('clients');
$client = $user->clients->find($id);
// or one line, not recommended:
$client = Sentry::getUser()->load('clients')->clients->find($id);
否则只需使用您尝试的内容:
$client = Sentry::getUser()->clients->find($id);
答案 1 :(得分:0)
你可以尝试这个,但我不知道它是否适合你,如果这是你想要实现的目标:
$users = Sentry::getUser()->with(array('clients' => function($q) use($id)
{
$q->whereId($id);
}))->get()->toArray();