【问题标题】:Blank object in Eloquent belongsTo()Eloquent 中的空白对象 belongsTo()
【发布时间】:2022-01-07 00:01:46
【问题描述】:

我正在尝试显示项目的哪一个属性 (code)。 ServiceItem 将 Item 作为外键。但是我根本拿不到这个物品。

这在刀片模板中给出了一个空白对象:

@foreach ($service->serviceItems as $serviceItem )
    {{ json_encode($serviceItem->item()) }}
@endforeach

这是我的模型声明:

//ServiceItem model
class ServiceItem extends Model
{
    use HasFactory;
    public $fillable = ['service_id', 'item_id', 'values'];

    public function service()
    {
        return $this->belongsTo(Service::class, 'foreign_key');
    }

    // this doesn't work
    public function item()
    {
        return $this->belongsTo(Item::class, 'foreign_key');
    }
}

// Service model
class Service extends Model
{
    use HasFactory;
    public $fillable = ['user_id', 'site_id', 'title', 'status', 'remarks', 'report', 'date'];

    public function user()
    {
        return $this->belongsTo('\App\Models\User');
    }

    public function site()
    {
        return $this->belongsTo('\App\Models\Site');
    }

    public function serviceItems() {
        return $this->hasMany('\App\Models\ServiceItem');
    }

}

这是我的控制器:

public function index()
{
    $services = Service::latest()->paginate(5);
    return view('services.index', compact('services'))
        ->with('i', (request()->input('page', 1) - 1) * 5);
}

请帮我在服务项目中显示code 属性!!!非常感谢!

【问题讨论】:

  • 您将使用动态属性$serviceItem->item,而不是访问关系的方法;该方法将返回一个关系构建器对象而不是结果......但动态属性可以返回null,因为 Belongs To 可以返回一个模型或null

标签: laravel eloquent laravel-blade


【解决方案1】:

我想你阅读了模型关系定义的 Laravel 文档。他们提到将外键作为第二个参数,而不是 foreign_key 作为单词,而是您引用父表的实际外键。您必须更改型号代码。

class ServiceItem extends Model
{
    use HasFactory;
    public $fillable = ['service_id', 'item_id', 'values'];

    public function service()
    {
        return $this->belongsTo(Service::class, 'service_id');
    }

    public function item()
    {
        return $this->belongsTo(Item::class, 'item_id');
    }
}

然后$serviceItem->item 应该会按预期工作。

【讨论】:

  • 谢谢,它有效!所以 belongsTo() 的第二个参数必须是表的列名,对吗?
  • 是的,没错。
猜你喜欢
  • 1970-01-01
  • 2013-05-20
  • 2020-07-04
  • 2018-08-06
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多