Pour la requête en sous-requête. Eloquent vs MySql

Dennis Muntjans:

Je voudrais obtenir des listes qui sont suivies par un utilisateur particulier et des listes de commande par created_at(par date ont été suivis des listes). Je ne sais pas pourquoi il ne fonctionne pas (par ordre) en utilisant Eloquent:

$myQuery = PlaceList::query()
   ->where('private', 0)
   ->whereHas('followers', function ($query) use ($userID) {
      $query->where('created_by_user_id', $userID);
   })
   ->orderByDesc(
      Follow::query()->select('created_at')
         ->where('created_by_user_id', $userID)
         ->where('followable_id', 'place_lists.id')
   )
   ->get()

Voilà ce que j'ai quand je l' utilise dd($myQuery->toSql()):

select 
    * 
from 
    `place_lists` 
where 
    `private` = ? 
    and exists (
                select 
                   * 
                from 
                   `follows` 
                where 
                   `place_lists`.`id` = `follows`.`followable_id` 
                   and `created_by_user_id` = ? 
                   and `follows`.`deleted_at` is null
                ) 
    and `place_lists`.`deleted_at` is null 
order by (
   select 
      `created_at` 
   from 
      `follows` 
   where 
      `created_by_user_id` = ? 
      and `followable_id` = ? 
      and `follows`.`deleted_at` is null
) desc

Mais quand je POPULATE MySql avec des données qu'il fonctionne:

select 
    * 
from 
    `place_lists` 
where 
    `private` = 0 
    and exists (
                select 
                   * 
                from 
                   `follows` 
                where 
                   `place_lists`.`id` = `follows`.`followable_id` 
                   and `created_by_user_id` = 13 
                   and `follows`.`deleted_at` is null
                ) 
    and `place_lists`.`deleted_at` is null 
order by (
    select 
        `created_at` 
    from 
        `follows` 
    where 
       `created_by_user_id` = 13 
       and `followable_id` = `place_lists`.`id`
       and `follows`.`deleted_at` is null
) desc

Je suis bien confus, ce que je fais mal?

mrhn:

Cette requête, vous affirmez que followalbe_idest égal à 'place_lists.id'.

->orderByDesc(
    Follow::query()->select('created_at')
        ->where('created_by_user_id', $userID)
        ->where('followable_id', 'place_lists.id')
)

Pour comparer deux colonnes utilisent à la whereColumn()place.

->orderByDesc(
    Follow::query()->select('created_at')
        ->where('created_by_user_id', $userID)
        ->whereColumn('followable_id', 'place_lists.id')
)

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=373284&siteId=1
conseillé
Classement