如何使用 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() 或者使用动态属性来代替关系,-&gt;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

但是如果我选择所有我会返回数据 你能看看这最后的评论,看看你能不能帮忙?

以上是关于如何使用 Laravel 一对一将用户数据传递到 JSON 文件中的主要内容,如果未能解决你的问题,请参考以下文章

一对一的用户消息传递数据库模式

laravel 模型关联 一对多

如何使用 laravel+VueJS 以一对一的关系获取数据

如何通过重定向将数据传递到laravel中的视图

如何在 Laravel 5.7 中将多个数据库数据传递到 jQuery 的自动完成(AJAX)中

如何使用 laravel 8 同时保存一对多关系数据