0

I've set a relation Has One Of Many in 'advanced way', it's almost identical to the example on Laravel site (eloquent-relationships#advanced-has-one-of-many-relationships).

class DocumentType extends Model
{
    use HasFactory, SoftDeletes;

    // Some other code here...

    public function currentRevision () {

       return $this->hasOne(DocumentTypeRevision::class, 'document_type_id')
               ->ofMany (['revision_number' => 'max', 'revision_date' => 'max'], 
                                 function ($qry) {
                   $qry->where('revision_date', '<=', now()->startOfDay());
                 });
    }
}

When i use:

$revision = DocumentType::find(1)->currentRevision;

i get the error.

The problem is that the generated SQL contains some fields in SELECT section that are not present in GROUP BY section, so the error SQLSTATE[42000]. I've found a temporary solution which is to disable 'ONLY_FULL_GROUP_BY' option in the database connection (database.php) but I would like to avoid the root problem.

Here the generated SQL for currentRevision:

select `document_types_revisions`.* 

from `document_types_revisions` 

inner join (

    select MAX(`document_types_revisions`.`id`) as `id_aggregate`, 
           `document_types_revisions`.`revision_date` as `revision_date_aggregate`, 
               `document_types_revisions`.`revision_number` as `revision_number_aggregate`, 
           `document_types_revisions`.`document_type_id` 
       
        from `document_types_revisions` 
    
    inner join (
    
        select max(`document_types_revisions`.`revision_date`) as     `revision_date_aggregate`, 
                  `document_types_revisions`.`revision_number` as `revision_number_aggregate`, 
              `document_types_revisions`.`document_type_id` 
               
            from `document_types_revisions` 
       
            inner join (
       
            select max(`document_types_revisions`.`revision_number`) as `revision_number_aggregate`, 
                      `document_types_revisions`.`document_type_id` 
            
            from `document_types_revisions` 
            
            where `revision_date` <= '2023-03-08 00:00:00' 
              and `document_types_revisions`.`document_type_id` = 3 
              and `document_types_revisions`.`document_type_id` is not null 
              and `document_types_revisions`.`deleted_at` is null 
              
                group by `document_types_revisions`.`document_type_id`
            
        ) as `currentRevision` on `currentRevision`.`revision_number_aggregate` = `document_types_revisions`.`revision_number` 
                              and `currentRevision`.`document_type_id` = `document_types_revisions`.`document_type_id` 
                              
            where `revision_date` <= '2023-03-08 00:00:00' 
          and `document_types_revisions`.`deleted_at` is null 
          
            group by `document_types_revisions`.`document_type_id`
        
    ) as `currentRevision` on `currentRevision`.`revision_date_aggregate` = `document_types_revisions`.`revision_date` 
                          and `currentRevision`.`revision_number_aggregate` = `document_types_revisions`.`revision_number` 
                          and `currentRevision`.`document_type_id` = `document_types_revisions`.`document_type_id` 
                          
    where `revision_date` <= '2023-03-08 00:00:00' 
      and `document_types_revisions`.`deleted_at` is null 
      
        group by `document_types_revisions`.`document_type_id`
    
) as `currentRevision` on `currentRevision`.`id_aggregate` = `document_types_revisions`.`id` 
                      and `currentRevision`.`revision_date_aggregate` = `document_types_revisions`.`revision_date` 
                      and `currentRevision`.`revision_number_aggregate` = `document_types_revisions`.`revision_number` 
                      and `currentRevision`.`document_type_id` = `document_types_revisions`.`document_type_id` 
                      
where `document_types_revisions`.`document_type_id` = 3 
  and `document_types_revisions`.`document_type_id` is not null 
  and `document_types_revisions`.`deleted_at` is null 
  
limit 1;
Pippo
  • 2,173
  • 2
  • 3
  • 16
  • Does this answer your question? [How can I solve incompatible with sql\_mode=only\_full\_group\_by in laravel eloquent?](https://stackoverflow.com/questions/43776758/how-can-i-solve-incompatible-with-sql-mode-only-full-group-by-in-laravel-eloquen) – Wahyu Kristianto Mar 11 '23 at 23:56
  • Thank you @WahyuKristianto, but in that thread are mostly suggested some workaround like that i did or are are given some suggestions to modify the query, but in my case the query is generated automatically by the relation – Pippo Mar 12 '23 at 19:27

0 Answers0