need some assistance making a query work in Laravel.
I've tried this query outside laravel and it works:
SELECT t.* FROM stories AS t JOIN ( SELECT created_at FROM stories WHERE id = 126 ) AS o ON t.created_at = o.created_at AND t.id > 126 OR t.created_at < o.created_at ORDER BY t.created_at DESC LIMIT 30;
Explanation: Basically it's needed for pagination as when users go to the next page it would show them 30 stories that were created before the specified id. When I sort the stories by created_at they become random, so I need to get the next 30 rows after a specific row which I accomplished with the above query. 126 is the id of the last story on the previous page which will be a variable in the actual code.
So when I try to use it in Laravel Eloquent whatever I do I just cannot make it work.
I've tried
$result = App\Story::join(DB::table('stories AS last_story')->find($previous_last_post_id), function($join) { $join->on('stories.created_at', '=', 'last_story.created_at') ->where('stories.id', '>', 'last_story.id') ->orWhere('stories.created_at', '<', 'last_story.created_at'); }) ->get() }}
Which gives me "ErrorException in Grammar.php line 39: Object of class stdClass could not be converted to string"
Changing the subquery to DB::table('stories AS last_story')->where('id', $previous_last_post_id)->get()
gives me "ErrorException in Grammar.php line 39: Array to string conversion"
Gave up and also tried raw query:
$result = DB::select("SELECT t.* FROM stories AS t JOIN ( SELECT created_at FROM stories WHERE id = 126 ) AS o ON t.created_at = o.created_at AND t.id > 126 OR t.created_at < o.created_at ORDER BY t.created_at DESC LIMIT 30")
but that gave me "ErrorException in helpers.php line 469: htmlentities() expects parameter 1 to be string, array given"
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire