[英]Creating a hasMany Relation in Laravel 5
我正在尝试创建标签/内容结构。 内容对象被分配给标签对象,标签对象可以被分配给许多内容。 我收到一个错误:
尝试获取非对象的属性“名称”(视图:D:\\ laragon \\ www \\ project1 \\ resources \\ views \\ contents \\ show.blade.php)
这些是我的模型:
内容:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Content extends Model {
public function tag() {
return $this->belongsTo('App\Tag');
}
}
标签:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tag extends Model {
public function contents() {
return $this->hasMany('App\Content');
}
}
ContentController:
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id) {
$content = Content::find($id);
return View('contents.show')
->with('content', $content);
}
show.blade.php:
@extends('layouts.app')
@section('content')
<div class="container">
<h1> {{ $content->tag->name }} - {{ $content->title }} </h1>
<div class="row">
<div class="col-lg-12">
Title: {{ $content->title }}
</div>
<div class="col-lg-12">
Body: {{ $content->body }}
</div>
<div class="col-lg-12">
Tag: {{ $content->tag }}
</div>
<hr />
<div class="col-lg-12">
{!! link_to('contents', 'Back', ['class' => 'btn btn-danger']) !!}
</div>
</div>
</div>
@endsection
我收到的错误来自h1标签:{{$ content-> tag-> name}}
有任何想法吗? 提前致谢 :)
参考模型内的表名
protected $table ="<table_name>"
您必须在调用"$content->tag->name"
之前检查"$content->tag"
是否有效。
问题在于表中的内容应具有tag_id,但您可以在Content模型中以这种方式解决它
class Content extends Model {
public function tag() {
return $this->belongsTo('App\Tag');
}
}
class Tag extends Model {
public function contents() {
return $this->hasMany('App\Content', 'tag');
}
}
这是解决方案:
将列名称标签更改为tag_id并更改return $ this-> belongsTo('App \\ Tag'); 返回$ this-> belongsTo('App \\ Tag','tag_id');
最终代码是:
内容模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Content extends Model {
public function tag() {
return $this->belongsTo('App\Tag','tag_id');
}
}
标签型号:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tag extends Model {
public function contents() {
return $this->hasMany('App\Content');
}
}
谢谢大家的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.