从 Laravel 中具有一对一关系的表中获取数据

Get data from to tables with one to one relation in Laravel

我正在处理我的第一个 Laravel 项目,我想创建一个带有框架的 REST Api,以便 AngularJS 使用它。在我的系统中,我有两种类型的用户:用户 A用户 B。我想使用默认 Laravel 的用户 table 来处理身份验证,并创建另外两个 tables,usera 和 userb,每个都有一列 user_id 是用户 table.

的外键

我将仅使用用户 table 来解释我的问题。我的迁移是这样的:

用户table

    //users table migration
        class CreateUsersTable extends Migration
        {
            public function up()
            {
                Schema::create('users', function (Blueprint $table) {
                    $table->increments('id');
                    $table->string('name');
                    $table->string('email')->unique();
                    $table->string('password');
                    $table->rememberToken();
                    $table->timestamps();
                });
            }
    ...
        }

用户table

    class CreateUserA extends Migration
    {
        public function up()
        {
            Schema::create('usera', function(Blueprint $table){
                $table->increments('id');
                $table->string('document_number')
                $table->integer('user_id')->unsigned();
                $table->foreign('user_id')
                    ->references('id')
                    ->on('users')
                    ->onDelete('cascade');
                $table->timestamps();
            });
        }
        ...
    }

在 UserA 模型中 class 我做到了:

class UserA extends Model
{
    protected $fillable = array('id', 'document_number', 'user_id');
    protected $hidden = array('created_at', 'updated_at');

    public function user(){
        $this->belongsTo('App\User');
    }
}

因此,我使用API 方法创建了一个UsersA 控制器,并配置了访问相应功能的路由。 'api/usersa/' url 通过 GET 重定向到我的控制器的索引功能,功能是这样的:

public function index($id = null) {
    if ($id == null) {
        return UserA::orderBy('id', 'asc')->get();
    }else{
        return Usuario::find($id);
    }
}

有了这个,我可以获得 usersa table 数据,但我想合并 users 和 usersa table,并得到类似这样的响应:

[
   {
      'id': 1,
      'name': 'foo',
      'email': 'foo@bar.com',
      'document_number': '1234'
   }
]

我该怎么做?

一定要这么平吗?最简单的解决方案是:

public function index($id = null) {
    if ($id == null) {
        return UserA::with('user')->orderBy('id', 'asc')->get();
    }else{
        return Usuario::with('usera')->find($id); // or whatever the relation name is.
    }
}