簡體   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