我有一个名为 的 jsonb 字段passengers,其结构如下:
请注意,persons 是一个数组
{
"adults": {
"count": 2,
"persons": [
{
"age": 45,
"name": "Prof. Kyleigh Walsh II",
"birth_date": "01-01-1975"
},
{
"age": 42,
"name": "Milford Wiza",
"birth_date": "02-02-1978"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
如何针对此 JSONB 的名称字段执行查询?例如,要选择与名称字段匹配的所有行Prof?
这是我的初步尝试:
SELECT passengers from opportunities
WHERE 'passengers->adults' != NULL
AND 'passengers->adults->persons->name' LIKE '%Prof';
Run Code Online (Sandbox Code Playgroud)
这会返回 0 行,但正如您所看到的,我有一行的名称为Prof. Kyleigh Walsh II
在 Laravel 中,我在以下位置定义自定义日志文件/config/logger.php:
'mycustomlog' => [
'driver' => 'stack',
'path' => storage_path('logs/mycustomlog.log'),
'level' => 'info',
],
Run Code Online (Sandbox Code Playgroud)
这是我的上下文堆栈驱动程序:
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'syslog'],
'ignore_exceptions' => false,
],
Run Code Online (Sandbox Code Playgroud)
我这样称呼它:
Log::channel('mycustomlog')->info($e);
我期望发生什么:
创建(每日)日志文件并记录异常。IEmycustomlog-2019-11-07.log
实际发生的情况:
未创建日志文件,但会记录以下错误laravel.log:
[2019-11-07 10:25:31] laravel.EMERGENCY: Unable to create configured logger. Using emergency logger. {"exception":"[object] (ErrorException(code: 0): Undefined index: channels at /var/www/vendor/laravel/framework/src/Illuminate/Log/LogManager.php:232)
Run Code Online (Sandbox Code Playgroud)
解决方案:
'mycustomlog' => [
'driver' => 'daily',
'channels' => ['syslog'],
'path' => storage_path('logs/mycustomlog.log'),
'level' => 'info',
],
Run Code Online (Sandbox Code Playgroud) 我有我的图形数据库,填充了节点,关系,属性等.我希望看到整个数据库如何连接,每个节点的每个关系,节点的属性等的概述.
我并不是指查看每个单独的节点,而是来自关系数据库的ERD,类似这样的节点标签.这可能吗?
我想在我的项目中测试 JWT 的身份验证,因为 JWT 将从应用程序外部发送,因此必须使用我的应用程序中的密钥对它们进行签名。这可能吗?有谁知道允许您使用秘密签署令牌的网站?
我试过http://jwtbuilder.jamiekurtz.com/但{"error":"token_invalid"}如果我输入由jwt:generate. 这使我相信此命令返回的密钥实际上并不是用于在我的应用程序中对 JWT 进行签名的密钥。
我正在使用php artisan jwt:generate生成一个密钥,它返回以下内容:
jwt-auth secret [...] set successfully.
Run Code Online (Sandbox Code Playgroud)
但是它在哪里设置?JWT_SECRET我的 .ENV 文件中的变量不会改变,如果我对密钥执行项目范围的搜索,则找不到它。
这个命令有效吗?
Laravel 5.3,jwt-auth 0.5.9。
我需要验证请求的 JSON 正文,它必须是一个数组。
我知道我可以将各个字段验证为数组,如下所示:
$request->validate([
'name' => ['required', 'array'],
]);
Run Code Online (Sandbox Code Playgroud)
但是我如何验证整个请求是一个数组而不是一个对象?
我希望在我的一个视图中获取当前路径/路径以用于if statmenent.
例如,我想要实现这样的事情:
example.erb:
<h4>Foobar<h4>
<p>foo bar foo bar foo bar</p>
<% if current_route == /hello %>
<%= erb :_hello %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
app.rb:
get '/foobar' do
erb :example
end
get '/hello' do
erb :example
end
Run Code Online (Sandbox Code Playgroud)
这样,两条路线转到同一视图,但如果通过途径访问/hello,它将_hello.erb在视图上呈现额外的部分.
这在Sinatra有可能吗?实现它的最佳方法是什么?
是否可以创建一种快速的方法来从一对多关系中返回第一个模型?这是我的代码,来自模型文件:
public function books() {
return $this->hasMany('App\Models\Book');
}
public function first_book() {
return $this->book()->first();
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
'Call to undefined method Illuminate\Database\Query\Builder::addEagerConstraints()'
我想使用它的原因是为了可以使用with()方法收集第一条记录,例如:
$authors = Author::with('first_book')->select('*');
Run Code Online (Sandbox Code Playgroud)
我正在将这些记录与数据表一起使用。
我尝试使用 DataTables 与服务器端处理来显示 80,000 行(分页),但 Laravel 崩溃并出现以下错误:
PHP Fatal error: Maximum execution time of 300 seconds exceeded in /Users/fin/Documents/dev/evway-new/vendor/nesbot/carbon/src/Carbon/Carbon.php on line 291。
这是我获取行的控制器方法:
public function data()
{
$employees = Employee::get(); // ~80,000 employees
return Datatables::of($employees)
->edit_column('created_at',function(Employee $employee) {
return $employee->created_at->diffForHumans();
})
->add_column('actions',function($employee){
$actions = '<a href='. route('admin.employees.show', $employee->id) .'><i class="livicon" data-name="info" data-size="18" data-loop="true" data-c="#428BCA" data-hc="#428BCA" title="view employee"></i></a>
<a href='. route('admin.employees.edit', $employee->id) .'><i class="livicon" data-name="edit" data-size="18" data-loop="true" data-c="#428BCA" data-hc="#428BCA" title="update employee"></i></a>';
$actions .= '<a href='. route('admin.employees.clone', $employee->id) .' data-target="#clone"><i class="livicon" …Run Code Online (Sandbox Code Playgroud) whereExists()我正在尝试在现有的 Eloquent 查询生成器(称为)上使用$trips:
$trips = $trips->whereExists(function ($query) use ($filterValue) {
$query->from(DB::raw("jsonb_array_elements(passengers->'adults'->'persons') as p(person)"))
->whereRaw("p.person->>'name' LIKE '?%'", $filterValue);
});
Run Code Online (Sandbox Code Playgroud)
我尝试以原始 postgres 格式创建的查询如下(此查询使用 pgAdmin 可以正常工作):
SELECT *
from trips
WHERE exists (select *
from jsonb_array_elements(passengers -> 'adults' -> 'persons') as p(person)
where p.person ->> 'name' LIKE 'Prof%');
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Invalid parameter number: parameter was not defined
我觉得问题很小,但是我自己看不出来。
我想在Laravel Product模型中添加一个方法,该方法按nameattr 过滤并返回所有匹配产品的集合,这就是我得到的:
public function filterByName($query)
{
return $this->where('name','LIKE','%'.$query.'%')->get();
}
Run Code Online (Sandbox Code Playgroud)
$products = collect(new Product);
$products->filterByName($name);
Run Code Online (Sandbox Code Playgroud)
正确的用法是什么?我需要使用QueryFilter吗?
laravel ×7
php ×4
eloquent ×3
postgresql ×2
datatable ×1
datatables ×1
diagram ×1
erd ×1
jsonb ×1
jwt ×1
laravel-5.8 ×1
logging ×1
neo4j ×1
path ×1
render ×1
ruby ×1
sinatra ×1
validation ×1
visualize ×1