在Laravel 5中创建一个hasMany Relation

问题描述 投票:1回答:4

我正在尝试创建标记/内容结构。内容对象分配给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}}

有任何想法吗?提前致谢 :)

php laravel
4个回答
0
投票

在调用"$content->tag"之前,你必须检查"$content->tag->name"是否有效。


0
投票

问题是表中的内容应该有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');
    }
}

0
投票

这是解决方案:

将列名标记更改为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');
    }
}

谢谢大家的帮助。


0
投票

请参阅模型中的表名

protected $table ="<table_name>"
© www.soinside.com 2019 - 2024. All rights reserved.