Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:荷载关系和特定柱_Php_Mysql_Laravel 5 - Fatal编程技术网

Php Laravel:荷载关系和特定柱

Php Laravel:荷载关系和特定柱,php,mysql,laravel-5,Php,Mysql,Laravel 5,我有两个表User和Car。一个用户可能有一辆车 我有一个这样的关系集: public function car() { return $this->hasOne('App\Car'); } User :: Select("*")->with("car")->get(); 我想用一辆车去接用户,但只选择用户的名称,以及车的颜色 如果我尝试 App\User::with('car:color')->select('name')->first()->t

我有两个表
User
Car
。一个用户可能有一辆车

我有一个这样的关系集:

public function car()
{
    return $this->hasOne('App\Car');
}
User :: Select("*")->with("car")->get();
我想用一辆车去接用户,但只选择用户的
名称
,以及车的
颜色

如果我尝试

App\User::with('car:color')->select('name')->first()->toArray();
那我就不懂车的颜色了。这就是结果:

array:1 [▼
  0 => array:2 [▼
    "name" => "Max Mustermann"
    "car" => []
  ]
]

是否可以只获取用户的姓名和汽车的颜色?

由于
user
表没有
color
列,因此失败。您必须访问关系才能获得颜色

$user = User::has('car')->first();

print $user->car->color;
好吧,你不可能只找到两个有着雄辩关系的领域。实现这一点的一种方法是使用查询生成器:

DB::table('users')
    ->join('cars', 'users.id', '=', 'cars.user_id')
    ->select('users.name', 'cars.color')
    ->get();

它失败,因为
用户
表没有
颜色
列。您必须访问关系才能获得颜色

$user = User::has('car')->first();

print $user->car->color;
好吧,你不可能只找到两个有着雄辩关系的领域。实现这一点的一种方法是使用查询生成器:

DB::table('users')
    ->join('cars', 'users.id', '=', 'cars.user_id')
    ->select('users.name', 'cars.color')
    ->get();
您可以这样尝试:

public function car()
{
    return $this->hasOne('App\Car');
}
User :: Select("*")->with("car")->get();
您可以这样尝试:

public function car()
{
    return $this->hasOne('App\Car');
}
User :: Select("*")->with("car")->get();

这是正确的方法

$users = User::with('car.color')->select('name')->get();
然后可以将它们显示为:

foreach($users as $user){
     echo $user->name . " owns a " . $user->car->color . " car.";
}

这是正确的方法

$users = User::with('car.color')->select('name')->get();
然后可以将它们显示为:

foreach($users as $user){
     echo $user->name . " owns a " . $user->car->color . " car.";
}

这将只从用户表中获取第一行。我知道您的方法可行,但这将返回用户的所有恶魔。我只希望我的用户对象有两个属性,在这种情况下,只有
$user->name
$user->car->color
不需要从两个表中加载所有其他字段。这将只从用户表中获取第一行。我知道您的方法可行,但这将返回用户的所有恶魔。我只希望我的用户对象有两个属性,在这种情况下,只有
$user->name
$user->car->color
不需要从两个表中加载所有其他字段。如果我这样做,那么
$user->car color
为空如果我这样做,那么
$user->car color
为空谢谢,你的方法有效。但是是否有一个查询使得返回的用户对象只有两个属性,在本例中只有
$user->name
$user->car->color
?我的应用程序不需要从这两个表中加载所有其他字段。当我编写原始SQL命令时,我从未使用过
SELECT*FROM
。。。获得speed@Adam,我很高兴你在我的答案的帮助下得到了一个解决方案,如果你接受这个答案并投赞成票就好了。至于您对速度的关注,我想说,这是ORM,它不会像使用
select*fromtable
从表中获取数据那样需要时间,所以不用担心。这没什么大不了的。谢谢,你的方法很有效。但是是否有一个查询使得返回的用户对象只有两个属性,在本例中只有
$user->name
$user->car->color
?我的应用程序不需要从这两个表中加载所有其他字段。当我编写原始SQL命令时,我从未使用过
SELECT*FROM
。。。获得speed@Adam,我很高兴你在我的答案的帮助下得到了一个解决方案,如果你接受这个答案并投赞成票就好了。至于您对速度的关注,我想说,这是ORM,它不会像使用
select*fromtable
从表中获取数据那样需要时间,所以不用担心。这不会有太大的区别。