【问题标题】:How to use eloquent "with" to pass array of multiple arrays for looping如何使用雄辩的“with”来传递多个数组的数组以进行循环
【发布时间】:2020-05-03 19:44:49
【问题描述】:

我正在尝试为单个 SQL 表中的不同过滤行创建一个具有不同 uls 的页面。在过去的几个小时里,我一直在尝试和搜索,看看如何使用“with”为视图提供多个数组,我将直接发布代码,以便更好地了解我的内容正在尝试做。每个数组使用不同的 SQL 参数,我不知道如何将它们全部收集到一个变量中,所以我决定将它作为数组传递

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Activity;

class ActivityController extends Controller
{
    public function index (){
        $activities[] = [
            'yearlies' => Activity::all()
                ->where('activity_feature_type', 'yearly')
                ->sortByDesc('activity_daily_budget')
                ->take(6),
            'monthlies' => Activity::all()
                ->where('activity_feature_type', 'monthly')
                ->sortByDesc('activity_daily_budget')
                ->take(4),
            'weeklies' => Activity::all()
                ->where('activity_feature_type', 'weekly')
                ->sortByDesc('activity_daily_budget')
                ->take(4),
        ];
        return view('activities')->with('activities', $activities);
    }
}

在客户端,我想遍历每个变量以将它们放入每个 UL 中

<div class="row pt-2">
            @if(count($yearlies) > 0)
                @foreach($activities['yearlies'] as $yearly)
                    <div class="col-sm-2">
                        <div class="card" style="width: 18rem;">
                            <img class="card-img-top" src="img/{{$yearly->activity_picture_link}}" alt="Card image cap">
                            <div class="card-body">
                                <h5 class="card-title">{{$yearly->name}}</h5>
                                <p class="card-text">{{$yearly->activity_desc_short}}</p>
                            </div>
                            <ul class="list-group list-group-flush">
                                @if ($yearly->activity_free === true)
                                    <li class="list-group-item"><h6 class="font-weight-bold">Free</h6></li>
                                @else
                                    <li class="list-group-item"><h6 class="font-weight-bold">${{$yearly->activity_low_cost}} - ${{$yearly->activity_high_cost}}</h6></li>
                                @endif
                            </ul>
                            <div class="card-body">
                                <a href="/activities/{{$yearly->id}}" class="card-link">View Activity</a>
                                <a href="/" class="card-link float-right">Save</a>
                            </div>
                        </div>
                    </div>
                @endforeach
            @else
                <h5 class="text-secondary text-center">No yearlies available</h5>
            @endif
        </div>

希望我正在尝试做的事情有点明显。无论如何,我一直在搜索,我看到的只是关于集合的东西,但我并没有亲自定义不同的子值,所以我不能利用它们所做的 => 功能。任何帮助表示赞赏。

编辑:下面是 $activities 的 dd,我想知道如何通过这个导航到每年的每一行

array:1 [▼
  0 => array:3 [▼
    "yearlies" => Illuminate\Database\Eloquent\Collection {#262 ▼
      #items: array:1 [▼
        0 => App\Activity {#295 ▼
          #table: "activities"
          #connection: "mysql"
          #primaryKey: "id"
          #keyType: "int"
          +incrementing: true
          #with: []
          #withCount: []
          #perPage: 15
          +exists: true
          +wasRecentlyCreated: false
          #attributes: array:14 [▼
            "id" => 1
            "name" => "name"
            "activity_desc_short" => "desc"
            "activity_desc" => "desc"
            "activity_free" => 0
            "activity_low_cost" => "10.50"
            "activity_high_cost" => "20.50"
            "activity_feature_type" => "yearly"
            "activity_daily_budget" => "3.00"
            "activity_picture_link" => null
            "activity_posting_business" => ""
            "location" => null
            "created_at" => "2020-01-16 21:22:18"
            "updated_at" => "2020-01-16 21:22:18"
          ]
          #original: array:14 [▶]
          #changes: []
          #casts: []
          #dates: []
          #dateFormat: null
          #appends: []
          #dispatchesEvents: []
          #observables: []
          #relations: []
          #touches: []
          +timestamps: true
          #hidden: []
          #visible: []
          #fillable: []
          #guarded: array:1 [▶]
        }
      ]
    }
    "monthlies" => Illuminate\Database\Eloquent\Collection {#288 ▶}
    "weeklies" => Illuminate\Database\Eloquent\Collection {#298 ▶}
  ]
]

【问题讨论】:

    标签: php arrays laravel eloquent


    【解决方案1】:

    当您在一个数组变量中发送值时,这意味着它是多维数组。

    另外,代替

    $activities[] = [
                'yearlies' => Activity::all()
                    ->where('activity_feature_type', 'yearly')
                    ->sortByDesc('activity_daily_budget')
                    ->take(6),
                'monthlies' => Activity::all()
                    ->where('activity_feature_type', 'monthly')
                    ->sortByDesc('activity_daily_budget')
                    ->take(4),
                'weeklies' => Activity::all()
                    ->where('activity_feature_type', 'weekly')
                    ->sortByDesc('activity_daily_budget')
                    ->take(4),
            ];
    

    使用

    $activities = [
                'yearlies' => Activity::all()
                    ->where('activity_feature_type', 'yearly')
                    ->sortByDesc('activity_daily_budget')
                    ->take(6),
                'monthlies' => Activity::all()
                    ->where('activity_feature_type', 'monthly')
                    ->sortByDesc('activity_daily_budget')
                    ->take(4),
                'weeklies' => Activity::all()
                    ->where('activity_feature_type', 'weekly')
                    ->sortByDesc('activity_daily_budget')
                    ->take(4),
            ];
    

    这将降低数组的复杂性。

    另外,在您的 blade 文件中 -

    
    <div class="row pt-2">
                @if(isset($activities) || $activities!= null)
                    @foreach($activities['yearlies'] as $yearly)
                        <div class="col-sm-2">
                            <div class="card" style="width: 18rem;">
                                <img class="card-img-top" src="img/{{$yearly->activity_picture_link}}" alt="Card image cap">
                                <div class="card-body">
                                    <h5 class="card-title">{{$yearly->name}}</h5>
                                    <p class="card-text">{{$yearly->activity_desc_short}}</p>
                                </div>
                                <ul class="list-group list-group-flush">
                                    @if ($yearly->activity_free === true)
                                        <li class="list-group-item"><h6 class="font-weight-bold">Free</h6></li>
                                    @else
                                        <li class="list-group-item"><h6 class="font-weight-bold">${{$yearly->activity_low_cost}} - ${{$yearly->activity_high_cost}}</h6></li>
                                    @endif
                                </ul>
                                <div class="card-body">
                                    <a href="/activities/{{$yearly->id}}" class="card-link">View Activity</a>
                                    <a href="/" class="card-link float-right">Save</a>
                                </div>
                            </div>
                        </div>
                    @endforeach
                @else
                    <h5 class="text-secondary text-center">No yearlies available</h5>
                @endif
            </div>
    
    

    我想这会很好。如果我错了,请纠正我。希望这对你有用。

    【讨论】:

    • 这返回了一个错误; count():参数必须是数组或者实现了Countable的对象
    • 那么直接使用count就可以了。我将编辑我的答案。你可以试试。
    • 非常感谢,它已按预期启动并运行!
    【解决方案2】:
    div class="row pt-2">
                @if(count($yearlies) > 0)
                    @foreach($activities->yearlies as $yearly)
                        <div class="col-sm-2">
                            <div class="card" style="width: 18rem;">
                                <img class="card-img-top" src="img/{{$yearly->activity_picture_link}}" alt="Card image cap">
                                <div class="card-body">
                                    <h5 class="card-title">{{$yearly->name}}</h5>
                                    <p class="card-text">{{$yearly->activity_desc_short}}</p>
                                </div>
                                <ul class="list-group list-group-flush">
                                    @if ($yearly->activity_free === true)
                                        <li class="list-group-item"><h6 class="font-weight-bold">Free</h6></li>
                                    @else
                                        <li class="list-group-item"><h6 class="font-weight-bold">${{$yearly->activity_low_cost}} - ${{$yearly->activity_high_cost}}</h6></li>
                                    @endif
                                </ul>
                                <div class="card-body">
                                    <a href="/activities/{{$yearly->id}}" class="card-link">View Activity</a>
                                    <a href="/" class="card-link float-right">Save</a>
                                </div>
                            </div>
                        </div>
                    @endforeach
                @else
                    <h5 class="text-secondary text-center">No yearlies available</h5>
                @endif
            </div>
    

    试试这个

    【讨论】:

    • 这会返回“尝试获取非对象的属性‘yearlies’”
    猜你喜欢
    • 2018-02-02
    • 2021-04-22
    • 2022-01-12
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多