在做客户项目时遇到挫折。
Laravel 正在阅读
“调用模型 [App\Models\Service] 上未定义的关系 [service_item]”。
它只是尝试从同一数据库中的两个不同表中读取数据。
我在不同的项目上使用了这种方法,使用了不同的命名变量,当时没有问题,但现在我不知道我做错了什么。
服务控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Service;
class ServiceController extends Controller
{
public function getService()
{
$services = Service::with('service_item:resource,resource_id')->get();
return view('pages.service', compact('services'));
}
}
服务模式
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Service extends Model
{
use HasFactory;
public function service()
{
return $this->hasMany(Service::class);
}
}
Service_Item 模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Service_Item extends Model
{
use HasFactory;
public function serviceItem()
{
return $this->belongsTo(Service::class);
}
}
查看两个模型中的模型关系都是错误的。
假设 service_items 表有 service_id 作为外键
服务模式应该是
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Service extends Model
{
use HasFactory;
public function serviceItems()
{
return $this->hasMany(Service_Item::class);
}
}
Service_Item Model 应该是
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Service_Item extends Model
{
use HasFactory;
public function service()
{
return $this->belongsTo(Service::class);
}
}
在控制器中
$services = Service::with('service_items:resource,resource_id')->get();
还建议将 Service_Item Model 的名称切换为 ServiceItem