我正在显示数据库中的所有帖子,每个帖子属于一个类别,一个类别可以有多个帖子,问题是当我打印所有帖子数据时,我只能访问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');
}
}
答案 0 :(得分:1)
您可以像这样在控制器中包含类别关系:
$posts = Post::with('category')->get();
然后您可以像这样在JavaScript中检索它:
item.category.name