как я могу динамически упорядочить список в laravel?

Я стараюсь, чтобы список задач мог упорядочивать список через фильтр, чтобы у меня был список на сегодня, список на завтра или список на неделю, поэтому я сделал свой контроллер задач способным принимать запросы и т. Д. через дизайн репозиторий шаблонов я принимаю запрос на красноречивый запрос:

задачи диспетчера:

class TaskController extends Controller
{

    private $taskRepository;

    public function __construct(TaskRepository $taskRepository)
    {
        $this->taskRepository = $taskRepository;
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {

        if(!empty($request)){
            // dd($request);
            $tasks = $this->taskRepository->all($request);

        }else{
            $tasks = $this->taskRepository->all();
        }

        return view('tasks.index', compact('tasks'));
    }
 }

репозиторий задач:

class TaskRepository implements RepositoryInterface
{
    // model property on class instances
    protected $task;

     // Constructor to bind model to repo
     public function __construct(Task $task)
     {
         $this->task = $task;
     }

    public function all(Request $request)
    {
        $sortBy = 'expired_at';
        $order = Carbon::now();
        $finish = null;


        if($request)
        {
            if($request->has('today'))
            {
                $order = Carbon::today();
                return Task::where($sortBy, $order)->get();
            }

            if($request->has('tomorow')){

                $order = Carbon::tomorrow();
                return Task::where($sortBy, $order)->get();
            }

            if($request->has('week'))
            {

                $order = Carbon::now()->startOfWeek();
                $finish = Carbon::now()->endOfWeek();
                return Task::whereBetween($sortBy, [$order, $finish])->get();

            }


        }else{

            return Task::orderBy('order')->get();
        }
    }

чтобы закончить в моем индексе, у меня есть форма с использованием метода «получить»:

div>

        <form action="{{ route('tasks.index') }}" class="flex justify-between items-center p-2">
                <div>

                    <select name="orderByDate" id="">
                        @foreach(['today','tomorow', 'week'] as $orderDate)
                            <option value="{{ $orderDate }}">{{ ucfirst($orderDate) }}</option>
                        @endforeach
                    </select>
                </div>

                <div>
                    <button type="submit">Filter</button>
                </div>
        </form>

</div>
<ul class="my-5">
    @foreach ($tasks as $task)

        @if($task->order == 0)

        <li class="flex text-red-600 justify-between p-2">
            // task->name
            // task-> date
            // task-> edit
            // task->delete
        </li>
        @else

            <li class="flex justify-between items-center p-2">
                // task->name
              // task-> date
              // task-> edit
              // task->delete
            </li>

        @endif
        @empty
            <p>Pas de tâches aujourd'hui crée en une</p>
        @endforelse
</ul>

@endsection

по-видимому, мой foreach не работает с массивом, поэтому, если у кого-то есть какие-то сведения о том, как мне подойти к этой проблеме, это будет живой заставкой?


person matthias screed    schedule 09.05.2020    source источник


Ответы (1)


Попробуйте этот код для функции репозитория

public function all(Request $request)
{
    $sortBy = 'expired_at';
    $order = Carbon::now();
    $finish = null;


    if($request)
    {
        if($request->has('today'))
        {
            $order = Carbon::today();
            return Task::query()->where($sortBy, $order)->orderBy($sortBy)->get();
        }

        if($request->has('tomorow')){

            $order = Carbon::tomorrow();
            return Task::query()->where($sortBy, $order)->orderBy($sortBy)->get();
        }

        if($request->has('week'))
        {

            $order = Carbon::now()->startOfWeek();
            $finish = Carbon::now()->endOfWeek();
            return Task::query()->whereBetween($sortBy, [$order, $finish])->orderBy($sortBy)->get();

        }


    }else{

        return Task::query()->orderBy($sortBy)->get();
    }
}
person Ashiq Hassan    schedule 09.05.2020
comment
Да, я пытаюсь, но теперь у меня есть ошибка, например: ViewException Неверный аргумент, указанный для foreach () (View: /Users/{name}/code/todo_list/resources/views/tasks/index.blade.php), и я не знаю почему, потому что это работает, прежде чем каждый раз, когда я делаю такую ​​​​конфигурацию в репозитории, у меня возникает ошибка - person matthias screed; 09.05.2020
comment
@forelse ($tasks as $task) ›@if($task-›order == 0)›@if($task-›status) кажется, проблема с forelse, который работает совершенно иначе - person matthias screed; 09.05.2020
comment
вы передали параметр в запросе (любой из ['сегодня','завтра', 'неделя']) ?? - person Ashiq Hassan; 09.05.2020
comment
я повторно редактирую представление, обычно это не так заряжено, похоже, у него проблемы с форелсом - person matthias screed; 09.05.2020
comment
Пожалуйста, попробуйте код ответа еще раз. я внес некоторые изменения - person Ashiq Hassan; 09.05.2020
comment
все та же проблема в представлении: недопустимый аргумент для foreach() - person matthias screed; 09.05.2020