如何在laravel中同时保存两个表中的数据?

时间:2014-04-24 18:05:30

标签: php mysql laravel laravel-4

我有以下数据模式 enter image description here L

Detalle_Servicio有很多Material_UsadoMaterial_Usado只属于Detalle_Servicio

当我在Material_Usado中保存值时,应该知道ID Detelle_Servido,但我不能这样做。我有以下代码

路线

Route::post('/upload', function(){

    $path = public_path().'/servicios';
    try{
        $upload_success1 = Input::file('foto1')->move($path,'1');
        $upload_success2 = Input::file('foto2')->move($path,'2');
        $upload_success3 = Input::file('foto3')->move($path,'3');
        $upload_success4 = Input::file('foto4')->move($path,'4');
    }catch(Exception $e) {
        $e->getMessage();
    }
    $input = Input::get('json');
    $json = json_decode($input);

    if($upload_success1 && $upload_success2 && $upload_success3 && $upload_success4) {
        //DB::insert("INSERT INTO Detalle_Servicio (RutaFoto1, RutaFoto2, RutaFoto3, RutaFoto4, FechaTermino, Latitud, Longitud, Servicio_idServicio) values(?,?,?,?,?,?,?,?)", array($path.'1', $path.'2', $path.'3', $path.'4',$json->termino, $json->latitud, $json->longitud, $json->idServicio));
        $entradas = array(
                    'RutaFoto1' => $path.'1',
                    'RutaFoto2' => $path.'2',
                    'RutaFoto3' => $path.'3',
                    'RutaFoto4' => $path.'4',
                    'FechaTermino' => $json->termino,
                    'Latitud' => $json->latitud,
                    'Longitud' => $json->longitud,
                    'Servicio_idServicio' => $json->idServicio
                    );
        Detalle_Servicio::create($entradas);

       $array = array('Code' => '202', 'Message' => 'Done');
       return Response::json($array);
    } else {
        $array = array('Code');
       return Response::json('error', 400);
    }


 });

你可以看到我得到一个包含我存储在数据库中的值的JSON

我将数据保存在Detalle_Servicio表的数据库中,但我需要在Material _Usado中保存一些数据,但我需要在表Detalle_Servicio中保存数据时生成的ID 1}}

模型

class Detalle_Servicio extends Eloquent{
protected $table = 'Detalle_Servicio';
protected $primaryKey = 'idDetalle_Servicio';
protected $fillable = array('RutaFoto1', 'RutaFoto2', 'RutaFoto3', 'RutaFoto4', 'FechaTermino', 'Latitud', 'Longitud', 'Servicio_idServicio');


public function servicio(){
    return $this->belongsTo('Servicio', 'idServicio'); //le pertenece a
}
public function material_usado(){
    return $this->hasMany('Material_Usado', 'idMaterial_Usado');
}
}

class Material_Usado extends Eloquent{
protected $table = 'Material_Usado';
protected $primaryKey = 'idMaterial_Usado';

public function detalleServicio(){
    return $this->belongsTo('Detalle_Servicio', 'idDetalle_Servicio');
}
}

我该怎么办?

2 个答案:

答案 0 :(得分:1)

我真的不明白为什么你在routes.php中有这个功能。除非这只是例如...然后你应该有一个控制器,它将按顺序保存模型。

首先保存第一个模型,然后使用以下内容简单地检索所需的外键:

$serviceDetail = new Detalle_Servicio;
$serviceDetail->rutaFoto1 = Input::get('upload_success1');
etc..
$serviceDetail->save();

if ($serviceDetail->id)
{
$serviceDetail->material_usado()->attach($serviceDetail->id);
}

希望我理解这个问题:)

答案 1 :(得分:1)

使用时:

Detalle_Servicio::create($entradas);

它返回刚刚创建的模型实例,所以你应该这样做:

$Detalle_Servicio = Detalle_Servicio::create($entradas);

现在您可以使用以下方式获取已创建模型的ID:

$Detalle_Servicio->id;

所以,你可以这样做:

if($Detalle_Servicio = Detalle_Servicio::create($entradas)) {
    $id = $Detalle_Servicio->id;
    // ...
}