Почему мой запрашиваемый идентификатор и возвращенный идентификатор не совпадают?

Я работаю над разработкой приложения для своей компании и использую 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) и он возвращает пользователя с указанным идентификатором, но я не могу загрузить какие-либо отношения к этой модели (о чем я знаю).

Удостоверение личности Запрошено и возвращение удостоверения личности Дон't Match

Есть ли отношения BelongsToMany (например, Sentry::getUser()->clients()) запросить результат, полученный с помощью первичного ключа в сводной таблице, а не по названному ключу (client_id) и если да, то как мне обойти это?

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

Другие решения

Вы можете попробовать это, но я не знаю, сработает ли это для вас и будет ли это то, чего вы хотите достичь:

$users = Sentry::getUser()->with(array('clients' => function($q) use($id)
{
$q->whereId($id);

}))->get()->toArray();
0

По вопросам рекламы [email protected]