我有两个模型:posts并且likings具有一对多的关系(所以,一个帖子有很多喜欢).Likings模型还有一个isActive显示喜欢是主动还是被动的领域.
我想获得(排序)前5个帖子,这些帖子已经收到了最大的"活跃"喜欢(只有喜欢其isActive字段为true的帖子才会被考虑).
这是查询:
select posts.*, count(likings.id) as likes_count from 'posts'
left join 'likings' on 'likings'.'post_id' = 'posts'.'id' and 'likings'.'isActive' = 1
group by 'posts'.'id'
order by 'likes_count' desc
limit 5
Run Code Online (Sandbox Code Playgroud)
这是由这个laravel查询产生的:
Post::selectRaw('posts.*, count(likes.id) as likes_count')
->leftJoin('likes', function ($join) {
$join->on('likes.post_id', '=', 'posts.id')
->where('likes.is_active', '=', 1);
})
->groupBy('posts.id')
->orderBy('likes_count', 'desc')
->take(5)
->get();
Run Code Online (Sandbox Code Playgroud)
这是错误:
SQLSTATE[42000]: Syntax error or access violation: 1055
'database.posts.user_id' isn't in GROUP BY
Run Code Online (Sandbox Code Playgroud)
这里,posts.user_id也是posts表格的一个字段,显示了帖子的所有者.
我该如何解决这个错误?似乎改变mysql配置(可能是删除ONLY_FULL_GROUP_BY模式)是不合逻辑的,但查询中的变化最小.
我的框架是 Laravel 7,缓存驱动程序是 Memcached。我想执行原子缓存获取/编辑/放置。为此我使用Cache::lock()但它似乎不起作用。返回$lock->get()false(见下文)。我该如何解决这个问题?
Fort 测试,我重新加载 Homestead,并仅运行下面的代码。并且锁定永远不会发生。是否有可能Cache::has()破坏锁定机制?
if (Cache::store('memcached')->has('post_' . $post_id)) {
$lock = Cache::lock('post_' . $post_id, 10);
Log::info('checkpoint 1'); // comes here
if ($lock->get()) {
Log::info('checkpoint 2'); // but not here.
$post_data = Cache::store('memcached')->get('post_' . $post_id);
... // updating $post_data..
Cache::put('post_' . $post_id, $post_data, 5 * 60);
$lock->release();
}
} else {
Cache::store('memcached')->put('post_' . $post_id, $initial, 5 * 60);
}
Run Code Online (Sandbox Code Playgroud) 每个路由有两个刀片文件,一个用于Web,一个用于移动设备.我不知道处理请求的正确方法.这是一个正确的方法:
在每个控制器功能结束时(对于每个请求)
If it is mobile (via Jenssegers)
View::make(file_mobile.blade.php)
else
View::make(file_web.blade.php)
Run Code Online (Sandbox Code Playgroud)
你会建议什么?
我不知道composer之前laravel,我遇到了他们在同一时间。所以,我无法区分它们的命令,但记住它们。
是什么区别php artisan,并composer.phar和他们同时运行命令?
任何人都可以帮助我解决这个问题吗?谢谢..
我有这样一条路线:
Route::get('category/{id}/{date?}', array('as' => 'category/date', 'uses' => 'Controller@getCategory'));
Run Code Online (Sandbox Code Playgroud)
我想在调用“ /”根路由时使用默认参数运行@getCategory。因此,如果调用了“ /”路由,则getCategory函数应以id = 1和date = 2015-12-18运行。
我应该怎么做?