Laravel-在多个表中搜索ID

时间:2017-03-12 14:31:05

标签: php mysql laravel join eloquent

我正在建立一个房地产销售网站。房产可以是房屋,公寓,商店等....

我有这种关系:

模型://属性

class Imovel extends Model...

public function moradia(){
    return $this->hasOne(Moradia::class);
}

public function apartamento(){
    return $this->hasOne(Apartamento::class);
}

//公寓

 public function imovel(){
    return $this->belongsTo(Imovel::class);
}

// House

 public function imovel(){
   return $this->belongsTo(Imovel::class);
}

迁移:

//属性

Schema::create('imoveis', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('tipoImovel_id');
            $table->string('finalidade',20);
            $table->string('titulo',100);
            $table->date('data')->nullable();
            $table->integer('concelho_id');
            $table->string('freguesia',50);
            $table->string('rua',150);
            $table->decimal('long', 10, 7)->nullable();
            $table->decimal('lat', 10, 7)->nullable();
            $table->boolean('destaque');
            $table->boolean('estado')->default(true);
            $table->string('descricao',500);
            $table->string('preco',40);
            $table->integer('empresa_id')->default(1);
            $table->timestamps();

//房子

Schema::create('moradias', function (Blueprint $table) {
            $table->integer('imovel_id');
            $table->integer('nrPisosConstrucao');
            $table->integer('nrWcs');
            $table->integer('areaConstrucao');
            $table->integer('areaTerreno');
            $table->smallInteger('anoConstrucao');
            $table->timestamps();

//公寓

  Schema::create('apartamentos', function (Blueprint $table) {
            $table->integer('imovel_id');
            $table->integer('nrQuartos');
            $table->integer('nrWcs');
            $table->integer('nrPisosEdifio');            
            $table->integer('areasAcessorias');
            $table->integer('areasHabitacionais');
            $table->smallInteger('anoConstrucao');
            $table->timestamps();

我的问题是:我如何知道该物业是房屋,公寓还是商店......?

我有所有属性的列表,要编辑我怎么做?我怎么知道它是什么类型的财产?

由于

1 个答案:

答案 0 :(得分:1)

检查房屋或公寓表中是否有相关记录。因此,例如,如果在房屋表中没有相关记录,则$impovel->moradia()将为空。

前:

$imovel = App\Imovel::find($id);

if(!is_null($imovel->moradia())) {
    // Property is a house
}

修改

我认为你最好在属性表中使用列 - > property_type。这可以采取价值观,房子,公寓' shop'等。

这将有助于轻松选择房产/公寓房产。

此外,您可以使用一种关系方法:

public function attributes(){
    if($this->type == 'house') {
        return $this->hasOne(Moradia::class);
    }

    if($this->type == 'apartments') {
        return $this->hasOne(Apartamento::class);
    }
}

你可以这样做:$imovel->attributes(),这将给出相应的属性属性。