繁体   English   中英

在Laravel 5中创建hasMany关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM