我注意到当我使用查询生成器时,我在不同的文件中写了很多数据库表名。如果我要更改数据库表名,我将不得不在我的项目中搜索和更改相当多的行。这是您的 Laravel 人员注意到并提出解决方案的问题吗?
我喜欢使用类模型而不是数据库名称的 Eloquent 方法;但是对于某些查询,我认为 Query Builder 是一个更好的解决方案(尽管我不是这方面的专家)。
我有以下功能 -
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 的新手。那么我在查询中做错了什么?
我知道Laravel已删除lists()函数并将函数签名移为的事实pluck()。但是,对于想要从Laravel 4.x升级到Laravel 5.4的人来说,这会导致很多工作。
因此,我试图找到一种方法来仅利用现有函数(即lists()在我的代码中)并且仅利用pluck()->toArray()何时调用此函数。
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类一起扩展。但是,它已经扩展了口才模型类。
尝试使用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)
不,不是没有成功。
试图添加一个as ServiceProvider …
我正在尝试寻找一种搜索关系的方法。
因此,我具有一对一的关系(用户和用户详细信息,其中一些用户可能没有详细信息)。
因此,问题是...如何根据用户的详细信息搜索用户,但是没有详细信息的用户也必须包含在结果中。
示例:表用户: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
我在 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) 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
任何人都可以详细解释一下Eloquent的Model::query()意思吗?
我需要在 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) 如何使用我的模型在 Laravel Eloquent ORM 中运行此 SQL 语句?
update products set quantity = quantity + 3
Run Code Online (Sandbox Code Playgroud) 我有一个查询,我在其中使用 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) laravel ×8
eloquent ×5
php ×5
laravel-5 ×2
laravel-5.6 ×1
mysql ×1
pluck ×1
relationship ×1
sql ×1