【问题标题】:how can I order a list dynamically in laravel?如何在 laravel 中动态排序列表?
【发布时间】:2020-05-09 18:38:31
【问题描述】:

我尝试让待办事项列表能够通过过滤器对列表进行排序,这样我就可以获得今天的列表、明天的列表或本周的列表,所以我让我的任务控制器能够接受请求等通过设计模式存储库,我接受了做雄辩的请求:

控制器任务:

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();
        }
    }

为了完成我的索引,我使用“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

aparrently 我的 foreach 不适用于数组,所以如果有人知道我应该如何解决这个问题,这将是一个活生生的救星?

【问题讨论】:

    标签: laravel eloquent laravel-7


    【解决方案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();
        }
    }
    

    【讨论】:

    • 是的,我尝试过,但现在我有一个错误,例如:“ViewException 为 foreach() 提供的参数无效(查看:/Users/{name}/code/todo_list/resources/views/tasks/index. Blade.php)“我不知道为什么,因为每次我在存储库中进行这种配置之前它都可以正常工作我有一个错误
    • @forelse ($tasks as $task) >@if($task->order == 0)>@if($task->status) 工作的 forelse 似乎有问题完全不同
    • 您是否在请求中传递了参数(['today','tomorow','week'] 中的任何一个)??
    • 我重新编辑视图通常不是收费它似乎有问题
    • 请重试应答码。我做了一些改变
    猜你喜欢
    • 2015-02-25
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2018-08-22
    相关资源
    最近更新 更多