mysql 如何根据与查询有关系的不同表中的值对查询进行排序

fhity93d  于 2023-01-12  发布在  Mysql
关注(0)|答案(1)|浏览(118)

我有两个表格,一个是车辆,另一个是道路税。
我的'vehicles'表有一个id & registration字段,它与我的'roadtax'表有关系,'roadtax'表有id,vehicle_id,validfrom & expires字段。我有一个一对多的关系,因为我的车辆将有多年的历史,当我对它们征税时
我需要最简单的方法来列出我所有的车辆的顺序,这将需要重新征税第一。
我最接近的是让我的车辆上市时,税收是由于到期。我真的很挣扎,让他们在我需要的顺序。我有一个基本的了解php和mysql,所以希望有人能照亮我需要关注的地方。我想我可以只是orderby到期列,就像我如何成功地通过注册订购一样。这是因为我过期字段来自关系表吗?
控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Road_tax;
use App\Models\Vehicle;
use Carbon\Carbon;
class DashboardController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

    public function Index()
    {
        $road_taxes = Vehicle::with('latest_Road_Tax')->get()

        return view('dashboard.index', compact('road_taxes'));
    }
}

车辆型号

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Vehicle extends Model
{

    public function Road_taxes()
    {
        return $this->hasMany(Road_tax::class);
    }

    public function latest_Road_Tax()
    {
        return $this->hasOne(Road_tax::class)->latest("expires");
    }
    
}

视图

@foreach($road_taxes as $road_tax) 
    <div class="dashboard-item-title">
      <h6 style="font-weight:600; margin-bottom:0px;">{{$road_tax->registration}}</h6>

      <span class="dashboard-item-body" style="margin-top:-10px;">
        <small style="font-weight:300; color:grey;">Tax expires for this vehicle on</small>
        <small style="font-weight:300"> | {{$road_tax->latest_Road_Tax->expires}}</small>
      </span>
    </div>
@endforeach
pgpifvop

pgpifvop1#

您可以使用with()方法并作为查询生成器传递。
所以基本上你只需要一个关系vehicle->hasMany(Road_tax::class)
您的模型应该是:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Vehicle extends Model
{

    public function road_taxes()
    {
        return $this->hasMany(Road_tax::class);
    }
    
}

如果你想让每辆车都列出最近的道路税
您可以使用with()进行查询

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Vehicle;
use Carbon\Carbon;

class DashboardController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

    public function Index()
    {
        $road_taxes = Vehicle::with([
            'road_taxes' => function ($query) {
                $query->lastest()->limit(1);
            }
        ])->get();

        return view('dashboard.index', compact('road_taxes'));
    }
}

此方法将列出1与车辆相关的道路税

相关问题