@@ -16,82 +16,61 @@ public function apply($builder, Model $model)
1616
1717 $ query = $ builder ->getQuery ();
1818
19- $ relatedFK = $ model ->contentVersions ()->getForeignKeyName ();
20- $ related = $ model ->contentVersions ()->getRelated ();
21- $ relatedPK = $ related ->getKeyName ();
19+ $ cvModel = $ model ->contentVersions ()->getRelated ();
20+ $ cvFK = $ model ->contentVersions ()->getForeignKeyName ();
21+ $ cvPK = $ cvModel ->getKeyName ();
22+ $ cvCreationColumn = $ cvModel ->getCreatedAtColumn ();
2223
23- $ recordCreationColumn = $ related ->getCreatedAtColumn ();
24+ /**
25+ * @var Model
26+ */
27+ $ cvPublishedModel = $ cvModel ->publishLog ()->getRelated ();
28+ $ cvPublishedFK = $ cvModel ->publishLog ()->getForeignKeyName ();
2429
25- $ t1TableName = '_cv_t1 ' ;
26- $ t1Q = DB ::table ($ related ->getTable ())
27- ->orderByDesc ($ recordCreationColumn ) // sort by created_at desc
28- ->groupBy (
29- $ relatedFK , // group by content_id
30- $ recordCreationColumn , // include the ordered column in GROUP BY
31- )
30+ $ baseQ = DB ::table ($ cvModel ->getTable ())
31+ ->groupBy ($ cvFK )
3232 ->select ([
33- DB ::raw ("MAX( $ relatedPK ) AS latest_version_id " ),
34- $ relatedFK ,
33+ DB ::raw ("MAX( $ cvPK ) AS joined_version_id " ),
34+ $ cvFK ,
3535 ]);
36+
37+ $ cvAllQ = DB ::table ($ cvModel ->getTable (), '_cv_t2_all ' )
38+ ->joinSub ($ baseQ , '_cv_t1_base ' , fn (JoinClause $ join ) => $ join
39+ ->on ('_cv_t1_base.joined_version_id ' , '= ' , "_cv_t2_all. $ cvPK " )
40+ )
41+ ->select ("_cv_t2_all.* " );
3642
37- $ t2_1TableName = '_cv_t2_publish ' ;
38- $ t2_2TableName = '_cv_t2_all ' ;
39- $ t2_1Q = DB ::table ($ related ->getTable (), $ t2_1TableName )
40- ->joinSub (
41- $ t1Q ,
42- $ t1TableName ,
43- fn (JoinClause $ join ) => $ join
44- ->on ("$ t1TableName.latest_version_id " , '= ' , "$ t2_1TableName. $ relatedPK " )
43+ $ cvPublishedQ = DB ::table ($ cvModel ->getTable (), '_cv_t2_p ' )
44+ ->joinSub ($ baseQ , '_cv_t1_base ' , fn (JoinClause $ join ) => $ join
45+ ->on ('_cv_t1_base.joined_version_id ' , '= ' , "_cv_t2_p. $ cvPK " )
4546 )
46- ->where ("$ t2_1TableName.publish_state " , 'publish ' )
47- ->orderByDesc ("$ t2_1TableName. $ recordCreationColumn " )
48- ->select ([
49- "$ t2_1TableName. $ relatedFK " ,
50- "$ t2_1TableName.publish_state " ,
51- "$ t2_1TableName. $ relatedPK " ,
52- "$ t2_1TableName. $ recordCreationColumn " ,
53- "$ t2_1TableName.to_data AS data " ,
54- ]);
55- $ t2_2Q = DB ::table ($ related ->getTable (), $ t2_2TableName )
56- ->joinSub (
57- $ t1Q ,
58- $ t1TableName ,
59- fn (JoinClause $ join ) => $ join
60- ->on ("$ t1TableName.latest_version_id " , '= ' , "$ t2_2TableName. $ relatedPK " )
47+ ->whereExists (fn (\Illuminate \Database \Query \Builder |\Illuminate \Database \Eloquent \Builder $ query ) => $ query
48+ ->select (DB ::raw (1 ))
49+ ->from ($ cvPublishedModel ->getTable (), '_cv_base_p ' )
50+ ->where ("_cv_base_p. $ cvPublishedFK " , '= ' , "_cv_t2_p. $ cvPK " )
6151 )
62- ->orderByDesc ("$ t2_2TableName. $ recordCreationColumn " )
63- ->select ([
64- "$ t2_2TableName. $ relatedFK " ,
65- "$ t2_2TableName.publish_state " ,
66- "$ t2_2TableName. $ relatedPK " ,
67- "$ t2_2TableName. $ recordCreationColumn " ,
68- "$ t2_2TableName.to_data AS data " ,
69- ]);
52+ ->select ("_cv_t2_p.* " );
7053
54+ $ cvAllTableName = '_cv_all ' ;
55+ $ cvPublishedTableName = '_cv_published ' ;
7156 $ query
72- ->leftJoinSub (
73- $ t2_1Q ,
74- $ t2_1TableName ,
75- fn (JoinClause $ join ) => $ join
76- ->on ($ model ->getQualifiedKeyName (), '= ' , "{$ t2_1TableName }. {$ relatedFK }" )
77- )
78- ->leftJoinSub (
79- $ t2_2Q ,
80- $ t2_2TableName ,
81- fn (JoinClause $ join ) => $ join
82- ->on ($ model ->getQualifiedKeyName (), '= ' , "{$ t2_2TableName }. {$ relatedFK }" )
57+ ->leftJoinSub ($ cvAllQ , $ cvAllTableName , fn (JoinClause $ join ) => $ join
58+ ->on ($ model ->getQualifiedKeyName (), '= ' , "$ cvAllTableName. $ cvFK " )
8359 )
84- ->addSelect ($ model ->qualifyColumn ('* ' ))
8560 ->addSelect ([
86- DB ::raw ("{$ t2_1TableName }. {$ relatedPK } AS __latest_version_publish_id " ),
87- DB ::raw ("{$ t2_1TableName }. {$ recordCreationColumn } AS __latest_version_publish_dt " ),
88- DB ::raw ("{$ t2_1TableName } .data AS __latest_version_publish_data " ),
61+ DB ::raw ("{$ cvAllTableName }. {$ cvPK } AS __latest_version_id " ),
62+ DB ::raw ("{$ cvAllTableName }. {$ cvCreationColumn } AS __latest_version_dt " ),
63+ DB ::raw ("{$ cvAllTableName } .to_data AS __latest_version_data " ),
8964 ])
65+ ->leftJoinSub ($ cvPublishedQ , $ cvPublishedTableName , fn (JoinClause $ join ) => $ join
66+ ->on ($ model ->getQualifiedKeyName (), '= ' , "$ cvPublishedTableName. $ cvFK " )
67+ )
9068 ->addSelect ([
91- DB ::raw ("{$ t2_2TableName }. {$ relatedPK } AS __latest_version_id " ),
92- DB ::raw ("{$ t2_2TableName }. {$ recordCreationColumn } AS __latest_version_dt " ),
93- DB ::raw ("{$ t2_2TableName }.data AS __latest_version_data " ),
94- ]);
69+ DB ::raw ("{$ cvPublishedTableName }. {$ cvPK } AS __latest_version_publish_id " ),
70+ DB ::raw ("{$ cvPublishedTableName }. {$ cvCreationColumn } AS __latest_version_publish_dt " ),
71+ DB ::raw ("{$ cvPublishedTableName }.to_data AS __latest_version_publish_data " ),
72+ ])
73+ ->addSelect ($ model ->qualifyColumn ('* ' ));
9574
9675 $ model ->withCasts ([
9776 '__latest_version_publish_dt ' => 'datetime ' ,
0 commit comments