首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel-8一对多/多一关系

Laravel-8一对多/多一关系
EN

Stack Overflow用户
提问于 2020-11-18 03:50:17
回答 1查看 874关注 0票数 0

我尝试为每个条目的页面显示类别,但它们都只显示‘JavaScript’。

(一个类别可以有多个条目,但每个条目只有一个类别。)

我的Category模型:

代码语言:javascript
复制
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';
    protected $fillable = [
        'name'
    ];

    public function entries() {
        return $this->hasMany(Entry::class);
    }
}

我的入口模型:

代码语言:javascript
复制
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Entry extends Model
{
    protected $table = 'entries';
    protected $fillable = [
        'title',
        'hours',
        'minutes',
        'category_id',
        'difficulty',
        'url'
    ];

    public function categories() {
        return $this->belongsTo(Category::class, 'category_id');
    }

    public function getCreatedAtAttribute($value)
    {
        return date('F d, Y H:i', strtotime($value));
    }
}

我的EntryController的show()方法:

代码语言:javascript
复制
    /**
 * Display the specified resource.
 *
 * @param  Entry  $entry
 * @return \Illuminate\Http\Response
 */
public function show(Entry $entry)
{
    $category = Entry::find($entry->category_id)->categories()->first();
    return view( 'entries.show', compact( 'entry', 'category' ) );
}

我的categories表的up()方法:

代码语言:javascript
复制
    /**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->id();
        $table->string('name', 255);
    });
}

我的条目表的up()方法:

代码语言:javascript
复制
    /**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('entries', function (Blueprint $table) {
        $table->id();
        $table->string('title', 255);
        $table->timestamps();
        $table->integer('hours');
        $table->integer('minutes');
        $table->foreignId('category_id')->constrained('categories');
        $table->string('difficulty', 255);
        $table->string('url', 255);

    });

    Schema::enableForeignKeyConstraints();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 04:00:51

您正在通过category_id获取条目,不需要再次查找Entry

代码语言:javascript
复制
$category = Entry::find($entry->category_id)->categories()->first();

应该是

代码语言:javascript
复制
$category = $entry->category;

BelongsTo是一种奇异关系,可以这样描述。

代码语言:javascript
复制
public function category() {
    return $this->belongsTo(Category::class);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64882360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档