标签: laravel-query-builder

Laravel 查询中“where”和“orwhere”无法正常工作

我有以下功能 -

public function search_profile(Request $request)
{
    $search_keyword = $request->search;
    $search_user = $request->user;
    $user_public = User::where('username', $request->user)->first();

    $tags_list = Tag::orderBy('tag', 'asc')->get();
    $bookmarks = Bookmark::orderBy('created_at','desc')->where('bookmarker', $search_user)->where('public', '1')->where('tags', 'rlike', $search_keyword)->orwhere('title', 'rlike', $search_keyword)->orwhere('description', 'rlike', $search_keyword)->orwhere('contents', 'rlike', $search_keyword)->paginate(15);
    $bookmarks_all = Bookmark::orderBy('created_at','desc')->where('bookmarker', $search_user)->where('public', '1')->where('tags', 'rlike', $search_keyword)->orwhere('title', 'rlike', $search_keyword)->orwhere('description', 'rlike', $search_keyword)->orwhere('contents', 'rlike', $search_keyword)->get();
    return view('profile_search')->with('bookmark', $bookmarks)->with('tags_list', $tags_list)->with('bookmarks_all', $bookmarks_all)->with('username', $user_public)->with('search_keyword', $search_keyword);
}
Run Code Online (Sandbox Code Playgroud)

但我什至从其他人那里得到了结果bookmarker。例如 - 如果$search_keyword = 'laravel'$serach_user = 'zack'。我也从其他用户那里得到结果。

我是 Laravel 的新手。那么我在查询中做错了什么?

php laravel-5 laravel-query-builder

4
推荐指数
1
解决办法
1万
查看次数

按查询分组并求和所有值

我在 SQL 中有这样的产品表:

productID   Type               Amount
1046          1                 4  
1046          1                 5  
1046          2                 10          
1047          1                 5           
1047          2                 3  
Run Code Online (Sandbox Code Playgroud)

如何进行查询,输出如下:

productID   Type          TotalTypeAmount    TotalPerProductID
1046          1                9                  19
1046          2                10                 19
1047          1                 5                  8
1047          2                 3                  8
Run Code Online (Sandbox Code Playgroud)

sql eloquent laravel-query-builder

4
推荐指数
1
解决办法
1万
查看次数

laravel:JSON 字段与数组的比较

laravel-5.7/mysql\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的数据库中,我有一个如下所示的 json 格式字段:

\n\n

字段名称:特征

\n\n
[\n    {"id": 1, "url": null, "name": "A"}, \n    {"id": 2, "url": null, "name": "B"}\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

同样在它的模型中,我写了这个

\n\n
  protected $casts = [\n    \'features\' => \'array\'\n  ];\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我创建一个数组:

\n\n
$features = array();\n\ntemp = array();\ntemp[\'id\'] = 1;\ntemp[\'url\'] = null;\ntemp[\'name\'] = A;\n$features[] = temp;\n\ntemp = array();\ntemp[\'id\'] = 2;\ntemp[\'url\'] = null;\ntemp[\'name\'] = B;\n$features[] = temp;\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何$features arrayfeatures field 数据库中的进行比较?

\n\n

\xd9\x91我检查了这些:

\n\n
$fff = \\App\\Cart::whereFeatures($features)->get()->first();\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
$fff = …
Run Code Online (Sandbox Code Playgroud)

php mysql laravel laravel-query-builder

4
推荐指数
1
解决办法
2402
查看次数

如何自动为 Laravel 中的现有值添加值

如何使用我的模型在 Laravel Eloquent ORM 中运行此 SQL 语句?

update products set quantity = quantity + 3
Run Code Online (Sandbox Code Playgroud)

php laravel eloquent laravel-5 laravel-query-builder

4
推荐指数
1
解决办法
1107
查看次数

使用 Laravel Eloquent 从列直接增加或减少数字更新

我有一个查询,我在其中使用 Eloquent 查找 ID,但我需要的是直接在 eloquent 查询中减去?与查询生成器相同,

文档代码

$flight = App\Flight::find(1);

$flight->name = 'New Flight Name';

$flight->save();
Run Code Online (Sandbox Code Playgroud)

我需要的是直接减去

$flight = App\Flight::find(1);

$flight->value =- 1;

$flight->save();
Run Code Online (Sandbox Code Playgroud)

php laravel eloquent laravel-query-builder

4
推荐指数
1
解决办法
2613
查看次数

Laravel 在其他表中查找平均结果

我在 Laravel 中有这个查询:

DB::table('score')
    ->select('score.score_nl', DB::raw('count(*) as total'), DB::raw('round(avg(rating_results.rating)) as final_rating'))
    ->join('rating', 'rating.score_id', '=', 'score.id')
    ->join('rating_results', 'rating.rating_result_id', '=', 'rating_results.id')
    ->groupBy('score_nl')
    ->get();
Run Code Online (Sandbox Code Playgroud)

结果:

[{"score_nl":"emphatisch","total":1,"final_rating":"1"},{"score_nl":"huilen","total":2,"final_rating":"3"},{"score_nl":"knuffelig","total":1,"final_rating":"1"},{"score_nl":"zindelijkheid","total":2,"final_rating":"3"}]
Run Code Online (Sandbox Code Playgroud)

rating_results在这个表中有一个名为(见图片)的表,我想查找final_rating并获取相关的result_en.

在此处输入图片说明

我怎么能在 Laravel 中做到这一点?

有任何问题请告诉我!

- 编辑 -

我试过这个;

$q = Result::select('result_nl')
    ->whereColumn('rating_results.rating', 'final_rating')
    ->whereColumn('rating_results.score_id', 'score_id')
    ->getQuery();

DB::table('score')
    ->select('score.score_nl', DB::raw('count(*) as total'), DB::raw('round(avg(rating_results.rating)) as final_rating'))
    ->join('rating', 'rating.score_id', '=', 'score.id')
    ->join('rating_results', 'rating.rating_result_id', '=', 'rating_results.id')
    ->selectSub($q, 'result_nl')
    ->groupBy('score_nl')
    ->get();
Run Code Online (Sandbox Code Playgroud)

但是后来我收到了这个错误:

SQLSTATE[42S22]: Column not found: 1247 Reference 'final_rating' not supported (reference to group function) …
Run Code Online (Sandbox Code Playgroud)

mysql sql laravel laravel-query-builder

4
推荐指数
1
解决办法
348
查看次数

有条件地建立一个Eloquent查询

上下文

我使用Laravel的雄辩如我的ORM.我创建了一个API端点提供访问Cars其有几个属性(color,make,status).

我的端点允许客户端通过这些属性的任何子集过滤返回值,如果它们不提供任何属性,那么我将返回所有内容.

问题

我想构建一个条件查询,它从"全部"开始,并根据指定的参数缩小.这是我写的:

public function getCars(Request $request)
{
    $results = Cars::all();

    if($request->has('color'))
         $results = $results->where('color', $request->input('color'));

    if($request->has('make'))
         $results = $results->where('make', $request->input('make'));

    if($request->has('status'))
         $results = $results->where('status', $request->input('status'));

    return $results->toJson();
}
Run Code Online (Sandbox Code Playgroud)

如果我在没有参数的情况下调用它,API将返回数据库中所有汽车的列表.但是,如果我指定(例如)0API的状态返回一个空集,尽管有些汽车的状态为0.

我接近这个错误吗?有什么根本我缺席的吗?

请注意,如果我改为:

$results = Cars::where('status', 0);
return $results->get();
Run Code Online (Sandbox Code Playgroud)

正确生成汽车列表

php laravel eloquent laravel-5 laravel-query-builder

3
推荐指数
1
解决办法
1104
查看次数

投放查询构建器laravel

我想cast在查询生成器laravel中订购

因为我pricevarchar类型

所以当它排序时...结果远远超出我想要的...

我的脚本是这样的

DB::table('test')->where(...)->orderBy('price')->get();
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这样的事情

$query = CAST(price AS DECIMAL(10,2)) DESC;
DB::table('test')->where(...)->orderBy($query)->get();
Run Code Online (Sandbox Code Playgroud)

如何转换OrderBy查询生成器,以便对pricedesc 进行排序

laravel laravel-query-builder

3
推荐指数
1
解决办法
6840
查看次数

Laravel在where子句中更改日期格式以匹配Carbon :: now()

我需要根据将来发生的日期选择条目,并且
条目包含日期格式:

12/30/17
Run Code Online (Sandbox Code Playgroud)

我试图格式化日期并与Carbon :: now()时间戳进行比较,但是没有运气。

$now = \Carbon\Carbon::now();

$bookings = DB::table('booking')
    ->select('booking.*')
    ->where('booking.uid', '=', Auth::id())
    ->where(DB::raw("(DATE_FORMAT(booking.date,'%Y-%m-%d 00:00:00'))"), ">=", $now)
    ->get();
Run Code Online (Sandbox Code Playgroud)

php date-formatting laravel laravel-query-builder

3
推荐指数
1
解决办法
3221
查看次数

Laravel急切的负载约束问题

编辑:为清楚起见,这是Laravel 5.8。

这是我正在使用的HR应用程序。

他们要求提供一份报告,以显示迟到的人。当然可以,我认为没有问题。

因此,我有一个带有一些自定义参数的表单,用户可以在其中输入以下内容:start_date,end_date,工资和一组部门。

public function show()
{
    request()->validate([
        'start_date' => 'required|date|before_or_equal:today'
    ]);

    $start = Carbon::parse(request('start_date'));
    $end = request('end_date') ? Carbon::parse(request('end_date')) : today();
    $wage = request('wage');
    $departments = request('departments');

    $query = EmployeePunch::with([
        'employee' => function($query) use ($wage, $departments) {
            // IF I UN COMMENT THESE, IN THE FILTER BLOCK BELOW, THE EMPLOYEE BECOMES UNDEFINED.
            // if($wage != null) {
            //     $query->where('hourly', $wage);
            // }

            // if($departments) {
            //     $query->whereIn('department_id', $departments);
            // }
        },
        'employee.group',
        'employee.department'
    ])
    ->whereBetween('punch_time', [$start->startOfDay(), $end->endOfDay()]) …
Run Code Online (Sandbox Code Playgroud)

php laravel eloquent laravel-5 laravel-query-builder

3
推荐指数
1
解决办法
50
查看次数