仅从连接表中获取指定的列

Posted

技术标签:

【中文标题】仅从连接表中获取指定的列【英文标题】:get only specified columns from the join table 【发布时间】:2016-02-25 02:08:26 【问题描述】:

首先我有这个“用户”模型

<?php namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract 

    use Authenticatable, CanResetPassword;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';
    protected $primaryKey = 'user_id';
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['username', 'email', 'password'];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = ['password', 'remember_token'];

    public function user_details()
        return $this->hasOne('App\users_details');
    


还有这个“users_details”模型

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class users_details extends Model 

    protected $table = "user_details";


       public function ud()
       
           return $this->belongsTo('App\User');
       

我试图仅从“user_details”模型中获取特定列(“user_details [foreign key = user_id]”模型与“User [primary key/reference key = user_id]”模型有关)

$users = User::with('user_details')->get(array('users.user_id', 'users_details.phone'));
dd(var_dump($users->toArray())); 

但不幸的是,无法正常工作,我收到此错误(请参阅下文)

Connection.php 第 624 行中的 QueryException:SQLSTATE[42S22]:列不存在 发现:1054 未知列“字段列表”中的“users_details.phone”(SQL: 从users中选择users.user_idusers_details.phone)

有什么想法、帮助、线索、建议、推荐吗?

【问题讨论】:

请解释您的意思是它不起作用,并可能添加您遇到的错误 试试$users = User::with('user_details')-&gt;select('users.user_id', 'users_details.phone')-&gt;get(); @Alexandros: 尝试过但我仍然得到同样的错误“'字段列表'中的未知列'users_details.phone' (SQL: 选择users.user_id, users_details.phone来自users)"。有什么想法吗? 【参考方案1】:

试试这个,

 User::with(array('user_details'=>function($query)
        $query->select('user_id','phone');
    ))->get();

希望它有效。

【讨论】:

我只是通过 var_dump 注意到 users_details 为空,它应该不为空,因为每个用户记录都有一个 users_details 记录,有什么想法吗? query->select () 第一个参数应该是该表的主键。是 id 还是 user_id ?在这里查看***.com/questions/19852927/…

以上是关于仅从连接表中获取指定的列的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 仅从表中获取并非所有值都是空值的列

SQLAlchemy 仅从连接表中选择列

获取存储在另一个表中的列的定义而不连接两次

休眠:仅从一个表中选择所有而不是 3 个连接表

使用子查询来连接两个表中的列

Laravel Eloquent - 使用连接选择列文本类似于其他表中的列文本