如何合并一对一关系的回报

时间:2019-04-29 12:16:13

标签: laravel

我在laravel中使用一对一关系。 我有两个模型,一个是User,另一个是UserDetails。

关系在用户模型中

mlflow.azureml.build_image()

我称这些模型为

ResolvePackageNotFound: 
  - pyspark=2.4.0.dev0

[0mThe command '/bin/sh -c CONDA_ROOT_DIR=$(conda info --root) && if [ -n "$AZUREML_CONDA_ENVIRONMENT_PATH" ]; then conda env update -p "$AZUREML_CONDA_ENVIRONMENT_PATH" -f '/var/azureml-app/conda.yaml'; else conda env update -n base -f '/var/azureml-app/conda.yaml'; fi && conda clean -aqy && rm -rf /root/.cache/pip && rm -rf "$CONDA_ROOT_DIR/pkgs" && find "$CONDA_ROOT_DIR" -type d -name __pycache__ -exec rm -rf {} +' returned a non-zero code: 1
2019/04/29 11:44:45 Container failed during run: acb_step_0. No retries remaining.
failed to run step ID: acb_step_0: exit status 1

Run ID: cmp failed after 1m58s

但是我正在打印返回内容,如下所示:-

public function userDetails(){

    return $this->hasOne(UserDetail::class); 

}

所以我想在将详细信息合并到一个对象中后得到回报。

谢谢

3 个答案:

答案 0 :(得分:1)

尝试以下代码:

    $user  = User::with('userDetails')->find(2);
    $user->user_detail_id = $user->userDetails->id;
    $user->address = $user->userDetails->address;
    $user->mobile_number = $user->userDetails->mobile_number;
    $user->passport_number = $user->userDetails->passport_number;
    $user->zip_code = $user->userDetails->zip_code;
    unset($user->userDetails);
    echo "<pre>"; print_r($user->toArray()); die;

谢谢。

答案 1 :(得分:1)

这将在您加载关系时自动发生。您可以使用with()load()进行此操作,具体取决于您是否拥有模型。

在上面的示例中,您将在同时获取用户的同时使用with()

$user  = User::with('userDetails')->find(2);

或者,如果您已经拥有User模型,则可以使用load()

 $user  = User::find(2);
 $user->load('userDetails');

现在,尽管如此,由于您只有一个User模型而不是一个集合,因此您不必担心急于解决的(n + 1)问题,因此您可以只需访问该属性,Laravel就会自动为您获取信息,例如:

 $user  = User::find(2);
 $user->user_details;

现在,如果您执行dd($user->toArray()),将会看到信息已加载。


仅供参考,而不是将print_r()die()一起使用并将其包装在<pre>标签中,可以使用dump()dd()帮助函数

答案 2 :(得分:0)

您尝试过这个吗     $ user =用户:: find(2)

echo print-r ($user->userDetails);