标签: laravel-collection

参考Laravel集合中的下一个项目

我循环浏览一个Laravel集合,按created_at时间排序.每个项目的开始日期是created_at,并且结束日期是created_at以下项目的开始日期.如果它是最后一项,则该事件仅持续30天.

我目前的代码是这样的:

@foreach ($statushistory->where('itemid', $timelineitemid) as $hist)
    [ '{{$hist->newstatus}}', new Date({{$hist->created_at->format('Y')}}, {{$hist->created_at->format('n')-1}}, {{$hist->created_at->format('j')}}), new Date({{$hist->created_at->format('Y')}}, {{$hist->created_at->format('n')-1}}, {{$hist->created_at->format('j')}}) ],
@endforeach
Run Code Online (Sandbox Code Playgroud)

正如您在此处所看到的,结束日期与开始日期相同,但我需要它作为下一个项目的开始日期.我以为会有一个帮手,比如last()我可以打电话的收藏品next()或其他任何东西.由于没有数字键,我不能只添加一个并抓住它.该项目按日期排序,唯一的ID类型字段是数据库中的字段,它是随机ID,如1434或1356.

关于如何获取下一个项目的start_date的任何想法,并检查我们是否在最后一项?我查看了PHP的next功能,但我不认为它能满足我的需求.

非常感谢

php laravel laravel-collection

6
推荐指数
2
解决办法
5402
查看次数

Laravel收藏mapWithKeys

我一直在尝试使用laravel的集合函数mapWithKeys创建一个数组,但是我无法实现我所需要的.

这是我的代码,

$years = range(1900, date('Y'));

return collect($years)->mapWithKeys(function($value){
    return [$value => $value];
})->all();
Run Code Online (Sandbox Code Playgroud)

预期结果

Array
(
    [1900] => 1900
    [1901] => 1901
    [1902] => 1902
    ....
    [2017] => 2017
)
Run Code Online (Sandbox Code Playgroud)

但我得到的是

Array
(
    [0] => 1900
    [1] => 1901
    [2] => 1902
    ...
    [117] => 2017
)
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-collection laravel-5.2 laravel-5.3

5
推荐指数
1
解决办法
1572
查看次数

Laravel集合将数组转换为对象

如果我运行$collection->filter(myFilter),Laravel会为集合中的每个模型添加密钥这样烦人的事情,如下所示:

{
    "4": {
        "myObject": "data"
    },
    "7": {
        "myObject": "data"
    }
}
Run Code Online (Sandbox Code Playgroud)

如何摆脱"4"和"7",这是我的对象数组?

我运行的代码是:

$obj = Cars::with('brand')->orderBy('id')->get();

return $obj->filter(function($value, $key)
{
    return $value->display == true;
});
Run Code Online (Sandbox Code Playgroud)

php json laravel laravel-collection

5
推荐指数
2
解决办法
6366
查看次数

在laravel的急切装载中,从多对多的关系中获取第一个或最新的第一个

我正在构建一个小应用程序laravel 5.4,我有两个模型Contact,Companies我之间有很多很多关系,在我的Contact Model:

public function company()
{
    return $this
        ->belongsToMany('App\Company', 'company_contact','contact_id', 'company_id')->withTimestamps();
}
Run Code Online (Sandbox Code Playgroud)

现在在某个地方,我希望拥有现有公司,即我想拥有latest() first().或者orderBy,created_by desc并获得first()排.为此,我必须做这样的事情:

$contacts = Contact::where('name', 'LIKE', '%'. $request->search_input. '%')
    ->orWhere('email', 'LIKE', '%'. $request->search_input. '%')
    ->orWhereHas('company', function ($q) use($request) {
        $q->where('name', 'LIKE', '%'. $request->search_input. '%');
    })
    ->with('company')
    ->orderBy('created_at', 'desc')
    ->paginate(50);
foreach ($contacts as $contact)
{
    $contact->company = $contact->company()->withPivot('created_at')->orderBy('pivot_created_at', 'desc')->first();
}
Run Code Online (Sandbox Code Playgroud)

为了删除foreach我尝试在我的Contact模型中使用新关系:

public function currentCompany()
{
    return $this
        ->belongsToMany('App\Company', …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-collection laravel-eloquent laravel-5.4

5
推荐指数
1
解决办法
326
查看次数

Laravel 高阶消息意外结果

我在 Laravel 中有一个更高阶的消息。它看起来像这样:

$category->scores->each->ratings->where('result.rating', '>=', 3)->count();
Run Code Online (Sandbox Code Playgroud)

Acategoryscores一个scorehasratings和 arating有一个result

我想获得每个类别 的评分总数where >= 3

使用我现在拥有的代码,最终结果始终为 0。

但是当我像这样循环时:

@foreach($categories as $category)
    @foreach($category->scores as $score)
        @foreach($score->ratings->where('result.rating', '>=', 3) as $rating)
            {{ $rating->result->result_nl }}
        @endforeach
    @endforeach
@endforeach
Run Code Online (Sandbox Code Playgroud)

有3个评分结果。

我的高阶消息有什么问题?

php laravel laravel-collection laravel-6

5
推荐指数
1
解决办法
157
查看次数

如何对 Laravel 集合进行分页?

这是我尝试分页的方式:

$posts = Post::all()->sortByDesc("created_at")->pagination(1);
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

方法 Illuminate\Database\Eloquent\Collection::pagination 不存在。

model-view-controller pagination laravel laravel-collection laravel-query-builder

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

如何在 Laravel 5.3 中对包含非拉丁字符的 UTF-8 字符串集合进行排序?

各位,我想按字符串字母顺序对以下嵌套进行排序collection

\n\n
$collection = collect([\n    ["name"=>"maroon"],\n    ["name"=>"zoo"],\n    ["name"=>"\xc3\xa1bel"],\n    ["name"=>"\xc3\xa9lof"]\n])->sortBy("name");\n
Run Code Online (Sandbox Code Playgroud)\n\n

我期望

\n\n
1=> "\xc3\xa1bel"\n2=> "\xc3\xa9lof"\n3=> "maroon"\n4=> "zoo"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到的是

\n\n
1=> "maroon"\n2=> "zoo"\n3=> "\xc3\xa1bel"\n4=> "\xc3\xa9lof"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我看到了一些 PHP 线程,但我很好奇是否有任何 Laravel 解决方法。谢谢。

\n

sorting collation utf-8 laravel-collection laravel-5.3

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

Laravel 分组集合返回对象而不是数组

我有以下查询

$outings = Outing::all()->groupBy(function ($item) {
   return Carbon::parse($item['start'])->format('m/d/Y');
});

return response()->json([
    'outings' => $outings
], 200);
Run Code Online (Sandbox Code Playgroud)

响应返回一个对象,我需要它返回一个数组 如您所见,outings 是一个对象而不是数组

我怎样才能让郊游成为一个数组而不是一个对象。

如果我不将集合分组而只是这样做

Outing::all();
Run Code Online (Sandbox Code Playgroud)

它将返回一个数组而不是一个对象。Group by 正在做一些奇怪的事情。

如果我 DD($outings) 它实际上返回一个集合,所以我认为它在返回到浏览器而不是数组时被转换为一个对象是很奇怪的。

下面是我 DD($outings->toArray()) 时的输出

在此处输入图片说明

谢谢

laravel laravel-collection

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

来自 Laravel 集合的 diff() 方法的“PHP 错误:在字符串上调用成员函数 getKey()”

以下是转储的集合:

//$collOne
Illuminate\Database\Eloquent\Collection {#3386
  #items: array:6 [
    4807 => "{"color_id":7,"size_id":4,"pack_id":null}"
    4808 => "{"color_id":7,"size_id":2,"pack_id":null}"
    4809 => "{"color_id":7,"size_id":6,"pack_id":null}"
    4840 => "{"color_id":44,"size_id":4,"pack_id":null}"
    4841 => "{"color_id":44,"size_id":6,"pack_id":null}"
    4842 => "{"color_id":44,"size_id":2,"pack_id":null}"
  ]
}
//$collTwo
Illuminate\Database\Eloquent\Collection {#3403
  #items: array:5 [
    430 => "{"color_id":7,"size_id":4,"pack_id":null}"
    431 => "{"color_id":7,"size_id":2,"pack_id":null}"
    433 => "{"color_id":44,"size_id":4,"pack_id":null}"
    434 => "{"color_id":44,"size_id":6,"pack_id":null}"
    435 => "{"color_id":44,"size_id":2,"pack_id":null}"
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

{
    "message": "Call to a member function getKey() on string",
    "exception": "Symfony\\Component\\Debug\\Exception\\FatalThrowableError",
    "file": "[obfuscated]/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php",
    "line": 281,
    "trace": [
        {
            "file": "[obfuscated].php",
            "line": 174,
            "function": "diff",
            "class": "Illuminate\\Database\\Eloquent\\Collection",
            "type": "->" …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-5 laravel-collection laravel-5.7

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

Laravel Collection 循环更新元素

我声明了一个collect()数据类型的变量。我想迭代它,并更新每行上的特定列。

\n

示例代码:

\n
    $a = collect([\n        [\'one\' => 1, \'two\' => 2],\n        [\'one\' => 3, \'two\' => 4],\n        [\'one\' => 5, \'two\' => 6]\n    ]);\n\n    foreach ($a as $b) {\n        $b[\'one\'] = 0;\n    }\n\n    dd($a);\n
Run Code Online (Sandbox Code Playgroud)\n

我不明白,为什么结果是这样的:

\n
\nCollection {#510 \xe2\x96\xbc\n  #items: array:3 [\xe2\x96\xbc\n    0 => array:2 [\xe2\x96\xbc\n      "one" => 1\n      "two" => 2\n    ]\n    1 => array:2 [\xe2\x96\xbc\n      "one" => 3\n      "two" => 4\n    ]\n    2 => array:2 [\xe2\x96\xbc\n      "one" => 5\n      "two" => 6\n    ]\n  ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n …

php laravel laravel-collection

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