Я работаю над разработкой приложения для своей компании и использую Laravel. Мне нужна была ссылка на BelongsToMany с собственной ссылкой на мою модель пользователя, чтобы позволить пользователям принадлежать другим пользователям. (т.е. AEs — клиенты)
Вот мой код:
$id = 6;
var_dump( "ID Queried Is: $id.", Sentry::getUser()->clients()->find($id)->toArray() );
Результат Sentry::getUser()->clients()->find($id)
вызывает проблемы, потому что когда я использую отношения, он использует неправильный идентификатор для поиска в соответствующей таблице.
я могу использовать Sentry::getUser()->clients->find($id)
и он возвращает пользователя с указанным идентификатором, но я не могу загрузить какие-либо отношения к этой модели (о чем я знаю).
Есть ли отношения BelongsToMany (например, Sentry::getUser()->clients()
) запросить результат, полученный с помощью первичного ключа в сводной таблице, а не по названному ключу (client_id
) и если да, то как мне обойти это?
Результатом этого 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);
Вы можете попробовать это, но я не знаю, сработает ли это для вас и будет ли это то, чего вы хотите достичь:
$users = Sentry::getUser()->with(array('clients' => function($q) use($id)
{
$q->whereId($id);
}))->get()->toArray();