jquery - Laravel 查询返回多个对象而不是一个
问题描述
我有一个“posts”表和一个“post_images”表。我正在尝试从两个表中获取数据并将“用户”表加入其中。一切正常,但查询为每个帖子图像返回不同的对象。
我的 AJAX 代码:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: '/loadPosts',
type: 'GET',
dataType: 'json',
data: {_token: "{{ csrf_token() }}"},
success: function(r){
console.log(r);
r.forEach((post)=>{
$('.posts-div').append(`
<div class="card mb-3">
<h5 class="card-header">
<img src="https://www.stickpng.com/assets/images/585e4bf3cb11b227491c339a.png" style="width: 35px; height: 35px;">
${post.name} ${post.surname}
</h5>
<div class="card-body">
<p class="card-text">${post.text}</p>
<img src="images/${post.link}" style="width: 100%;">
</div>
</div>
`);
})
}
})
路线:
Route::get('/loadPosts','UserController@loadPosts');
功能:
public function loadPosts(){
$my_id = Auth::user()->id;
$posts = DB::table('posts')->where('user_id','!=',$my_id)->join('post_images','posts.id','=','post_images.post_id')->join('users','posts.user_id','=','users.id')
->select('image','link','name','surname','text')
->get()
->toArray();
print_r(json_encode($posts));
}
这就是我在 AJAX 成功中得到的:
新帖子有 3 张图片,所以它必须是一个对象,而不是三个。
解决方案
创建模型并用于with()
加载关系数据。
对于 table posts
=>App\Post.php
并定义如下关系:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function images()
{
return $this->hasMany('App\PostImage');
}
public function user()
{
return $this->belongsTo('App\User');
}
}
对于表post_images
=>App\PostImage.php
喜欢:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class PostImage extends Model
{
public function post()
{
return $this->belongsTo('App\Post');
}
}
对于表users
=>App\User.php
喜欢:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function posts()
{
return $this->hasMany('App\Post');
}
}
现在在您UserController > loadPosts
更改代码中,如:
public function loadPosts(){
$my_id = Auth::user()->id;
$posts = App::Post->with("images", "user")
->where('user_id','!=', $my_id)
->get()
->toArray();
print_r(json_encode($posts)); // you can see the unique posts entries along with `images` and `user` inside it.
}
推荐阅读
- python - DetailView 中的分页 [Django]
- mysql - mysql中的语法错误,使用create函数
- arrays - 仅使用最后一个值循环
- html - html 的 VS 代码问题
- git - 将提交推送到 AWS CodeCommit 的 GitHub 操作:主机密钥验证失败
- c - 为什么我会得到这个异常错误-抛出未处理的异常:写访问冲突。头是 0xFFFFFFFFCBB1E630
- discord.py - Discord.py 静态定时器
- javascript - 解析错误:在反应中添加条件时出现意外标记
- angular - 带有firebase实时数据库的离子无限滚动
- node.js - 默认导入 index.js 文件