Laravel:检索属于帖子的类别名称,而不是category_id

时间:2018-07-23 16:59:41

标签: php jquery laravel

我正在显示数据库中的所有帖子,每个帖子属于一个类别,一个类别可以有多个帖子,问题是当我打印所有帖子数据时,我只能访问category_id字段(因为这是fk),但是我想要而是显示类别名称(名称是“类别”模型的另一个字段)。

我不知道该怎么做:

这是我通过GET AJAX调用检索帖子数据并将帖子数据附加到表主体的地方:

case "posts":
                    
                $.ajax({

                    async: true,
                    url: '/posts',
                    type: 'GET',
                    dataType: 'JSON',
             
                    success: function (data) { 
                    
                        console.log(data.posts);
                            
                        $('.row[data-link=' + linked_entry + ']').remove();
                    
                        $.each(data.posts, function (index, item) {
                    
                            var posts_row = '<tr class="row" data-link="posts">';
                            posts_row += '<td>' + item.category_id + '</td>';
                            posts_row += '<td>' + item.title + '</td>';
                            posts_row += '<td>' + item.body + '</td>';
                            posts_row += '<td><div style="width:110px; height:60px; background-image:url(' + item.image + '); background-size:cover;"></div></td>';
                            posts_row += '<td style="text-align:center;"><input type="checkbox" class="entry_checkbox" data-link="posts" data-id="' + item.id + '" data-isVisible="' + item.isVisible + '" name="isVisible" '+(item.isVisible ? 'checked' : '')+'></td>';
                            posts_row += '</tr>';
    
                            $('.entry_table_container[data-link=' + linked_entry + ']').append(posts_row);
                        });
                                
                          
                    },
            
                    error: function (data){
                        var errors = data.responseJSON;
                        console.log(errors);
                    }
                
                });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

这是我检索所有帖子数据(资源控制器)的地方:

public function index()
    {
        $posts = Post::all();
        
        return response()->json([
        
            'success' => 'Todas las publicaciones recogidas',
            'posts' => $posts,
        ]);
    }

这是我在其中创建帖子和迁移的迁移:

//CREATE CATEGORIES TABLE
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->boolean('isVisible')->default(true);
            $table->timestamps();
        });
        //FILL CATEGORIES TABLE WITH CATEGORIES
        DB::table('categories')->insert([
            'name' => 'Evento',
        ]);
        DB::table('categories')->insert([
            'name' => 'Oferta',
        ]);
        DB::table('categories')->insert([
            'name' => 'Notícia',
        ]);
        DB::table('categories')->insert([
            'name' => 'Artículo',
        ]);

模型关系:

类别:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';
    protected $fillable = ['name', 'isVisible'];
    
    
    
    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}

帖子:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = 'posts';
    protected $fillable = ['title', 'body', 'isVisible', 'image'];
    
    
    
    public function category()
    {
        return $this->hasOne('App\Category');
    }
    
}

1 个答案:

答案 0 :(得分:1)

您可以像这样在控制器中包含类别关系:

$posts = Post::with('category')->get();

然后您可以像这样在JavaScript中检索它:

item.category.name