我正在尝试创建标记/内容结构。内容对象分配给Tag对象,Tag对象可以分配给许多内容。我收到一个错误:
试图获取非对象的属性“名称”(查看: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}}
有任何想法吗?提前致谢 :)
在调用"$content->tag"
之前,你必须检查"$content->tag->name"
是否有效。
问题是表中的内容应该有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');
}
}
谢谢大家的帮助。
请参阅模型中的表名
protected $table ="<table_name>"