标签: laravel-query-builder

Laravel 查询构建器和表名

我注意到当我使用查询生成器时,我在不同的文件中写了很多数据库表名。如果我要更改数据库表名,我将不得不在我的项目中搜索和更改相当多的行。这是您的 Laravel 人员注意到并提出解决方案的问题吗?

我喜欢使用类模型而不是数据库名称的 Eloquent 方法;但是对于某些查询,我认为 Query Builder 是一个更好的解决方案(尽管我不是这方面的专家)。

database-table laravel laravel-query-builder

4
推荐指数
3
解决办法
7642
查看次数

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万
查看次数

在Laravel 5.4的查询生成器中添加lists()方法


我知道Laravel已删除lists()函数并将函数签名移为的事实pluck()。但是,对于想要从Laravel 4.x升级到Laravel 5.4的人来说,这会导致很多工作。

因此,我试图找到一种方法来仅利用现有函数(即lists()在我的代码中)并且仅利用pluck()->toArray()何时调用此函数。


我尝试了以下方法。

方法1

class BaseModel extends  Illuminate\Database\Query\Builder
public function __call($method, $args)
{
    return call_user_func_array($this->method,$args);
}

public function lists($column){
return $this->pluck($column)->toArray();
}
Run Code Online (Sandbox Code Playgroud)

不工作!
原因:这需要与BaseModel类一起扩展。但是,它已经扩展了口才模型类。

方法2

尝试使用traitlike 添加Required函数

listingWorkAround.php

<?php
trait listsWorkAround
{ 
  function lists($column){
    return $this->pluck($column)->toArray();
  }
}
Run Code Online (Sandbox Code Playgroud)

模型.php

<?php
namespace App;

use Watson\Rememberable\Rememberable;
use Illuminate\Database\Eloquent\Model as Eloquent;

abstract class Model extends Eloquent
{
    use listsWorkAround;
    use Rememberable;
}
Run Code Online (Sandbox Code Playgroud)

不,不是没有成功。

方法3

试图添加一个as ServiceProvider …

php laravel eloquent pluck laravel-query-builder

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

Laravel-搜索关系在whereHas中包括null

我正在尝试寻找一种搜索关系的方法。

因此,我具有一对一的关系(用户和用户详细信息,其中一些用户可能没有详细信息)。

因此,问题是...如何根据用户的详细信息搜索用户,但是没有详细信息的用户也必须包含在结果中。

示例:表用户:user_id,名称,电子邮件-1个John Doe johndoe@address.com-2个理查德·蒂姆richardtim@address.com-3个Michael Bird michaelbird@address.com

表格user_details:ID,user_id,州-1,1,加利福尼亚-2,2,纽约

现在...我想让所有用户都来自加利福尼亚,所有用户都没有州(在上述情况下,结果应该是John Doe和Michael Bird

这是用户模型中的关系:

public function details()
{
    return $this->belongsTo('App\UserDetails', 'user_id', 'user_id');
}
Run Code Online (Sandbox Code Playgroud)

搜索功能是:

$users = $users->whereHas('details', function($query) use $state {
    $query->where('state', $state);
});
Run Code Online (Sandbox Code Playgroud)

请记住,我必须使用雄辩的/查询构建器实例来执行此操作,但我无法使用联接或原始查询。

在这种情况下,我想从加利福尼亚州获取所有用户,并从所有非相关用户那里获取信息,但是查询仅返回/搜索相关用户/ user_details ...

那么,有人可以帮我吗?谢谢

更新:

我正在这样尝试:

$users = new User();
$users = $users->doesntHave('user_details')->orWhereHas('user_details', function($query) use($state) {
                $query->whereIn('state', $state);
            });
$users->where('created_at', '>=', $start_date);
$users->where('created_at', '<=', $end_date);
Run Code Online (Sandbox Code Playgroud)

php relationship laravel laravel-query-builder laravel-eloquent

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

按查询分组并求和所有值

我在 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万
查看次数

get the request values in Laravel

I wish to make search query by datepicker and select field. How could I get the requests values from below view file to controller? Where could I modify in the code? thanks.

index.blade.php

<div class="form-group col-sm-6">
    {!! Form::open(array('class' => 'form', 'method' => 'get', 'url' => url('/pdfs/job_finished_search'))) !!} 
       {!! Form::input('text', 'datepicker_from', null, ['placeholder' => 'Fra', 'id' => 'datepicker_from']) !!}
       {!! Form::input('text', 'datepicker_to', null, ['placeholder' => 'Til', 'id' => 'datepicker_to']) !!} 
       {!! Form::select('customer_name', $jobs->pluck('customer_name', 'customer_name')->all(), null, ['class' => 'form-control']) !!}
       {!! Form::submit('Søke', …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-request laravel-response laravel-query-builder

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

Eloquent的Model :: query()是什么意思?

任何人都可以详细解释一下Eloquent的Model::query()意思吗?

laravel eloquent laravel-query-builder laravel-5.6

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

如何在 Laravel 中编写原始查询

我需要在 Laravel 数据库中编写一个原始查询:查询生成器,输出特定表的大小

在核心mysql查询如下

SELECT table_name "Name_of_the_table", table_rows "Rows Count", round(((data_length + index_length)/1024/1024),2)
"Table Size (MB)" FROM information_schema.TABLES WHERE table_schema = "Name_of_the_Database" AND table_name ="Name_of_the_table";
Run Code Online (Sandbox Code Playgroud)

mysql laravel laravel-query-builder

4
推荐指数
2
解决办法
7841
查看次数

如何自动为 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
查看次数