如何使用 Laravel 一对一将用户数据传递到 JSON 文件中
Posted
技术标签:
【中文标题】如何使用 Laravel 一对一将用户数据传递到 JSON 文件中【英文标题】:How to pass user data into a JSON file using Laravel one to one 【发布时间】:2022-01-13 11:48:57 【问题描述】:我在使用一对一关系获取 JSON 文件中的用户数据时遇到问题 这是我的 PostRequest 模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PostRequest extends Model
use HasFactory;
public function user()
return $this->belongsTo(User::class, 'artisan_id');
用户模型
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laratrust\Traits\LaratrustUserTrait;
use App\Models\Verify;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Database\Eloquent\Model;
class User extends Authenticatable
use LaratrustUserTrait;
use HasFactory, Notifiable;
public function PostRequest()
return $this->hasOne(PostRequest::class, 'artisan_id');
控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\Models\PostRequest;
use App\Models\User;
class ChatController extends Controller
public function getMessages()
return view('user/message'); //response()->json($contacts);
public function getContact()
$email = Auth::user()->email;
$contacts = PostRequest::select('artisan_id')->where('email', '=', $email)
->limit('1')
->orderBy('id', 'DESC')
->user();
return response()->json($contacts);
//
如果运行上述控制器,我会收到此错误消息
[14:09:51] LOG.error: 调用未定义的方法 Illuminate\Database\Eloquent\Builder:: user() "userId":15,"exception":
如果我运行它,我会得到所有数据,但我需要一个特定的数据
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\Models\PostRequest;
use App\Models\User;
class ChatController extends Controller
public function getMessages()
return view('user/message'); //response()->json($contacts);
public function getContact()
$email = Auth::user()->email;
$contacts = PostRequest::all();
return response()->json($contacts);
//
【问题讨论】:
您还没有执行查询,orderBy
正在添加到正在构建的查询中,您必须调用类似 first
来检索结果(模型或 null
) 然后能够调用模型上的方法......虽然调用 user()
只会给你另一个关系/生成器对象而不是结果
所以我可以用 first() 替换 orderBy?
不,在orderBy
后面加上first()
这样你就可以真正得到结果了
谢谢,没有更多错误,但它返回空数据
因为user()
返回的是关系(构建器),而不是结果......你必须调用first()
或者使用动态属性来代替关系,->user
跨度>
【参考方案1】:
试试这个查询:
$email = Auth::user()->email;
$contacts = PostRequest::where('email', $email)->first()->user;
return response()->json($contacts);
【讨论】:
相同的空数组,还是我在某处出错了 感谢@lagbox,你一直在关注我,我很感激你,现在我在你的答案中添加了 ordeyBy('id', 'DESC') 并返回数据跨度> @lagbox 在将数据传递到我的 vue 时遇到问题,我正在使用此代码获取用户数据,我是否走上正轨?contact.user.name
contact.user .email
但是如果我选择所有我会返回数据 你能看看这最后的评论,看看你能不能帮忙?以上是关于如何使用 Laravel 一对一将用户数据传递到 JSON 文件中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 laravel+VueJS 以一对一的关系获取数据