【发布时间】:2017-03-18 19:56:01
【问题描述】:
使用Eloquent 的方法saveMany 将数据保存到数据库后,我想在一个JSON 块中同时返回parent data 和child data。问题是在我当前的实现中,我可以返回一个或另一个,但不能同时返回。什么是最合适和最干净的方法?
我有 2 个模型:
-
Theader(即标头) Line
关系是一对多的:
final class Theader extends Model
{
public $timestamps = false;
protected $fillable = array('total_amount', 'name', 'description');
public function lines()
{
return $this->hasMany('App\Line', 'header_id');
}
}
final class Line extends Model
{
public $timestamps = false;
protected $fillable = array('amount', 'description');
public function theader()
{
return $this->belongsTo('App\Theader', 'header_id');
}
}
当我插入新数据时::
- 1 行转到
theaders表。生成唯一的id。 - 2 到 100 行将转到
lines表。所有人都有相同的header_id。
这是我想出的可行解决方案:
namespace App\Http\Controllers;
use App\Theader;
use App\Line;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class TheaderController extends Controller
{
public function create(Request $request){
$input = $request->all();
$input['name'] = 'My name';
$input['description'] = 'My description';
$input['lines'][] = [ 'name' => 'Test 1', 'amount' => 19 ];
$input['lines'][] = [ 'name' => 'Test 2', 'amount' => 15 ];
// first create Header
$header = Theader::create($input);
// now let's create lines
$lines = [new Line($input['lines'][0]), new Line($input['lines'][1])];
$header->lines()->saveMany($lines);
return response()->json($header);
}
}
在这个例子中 - 我如何一次返回标题 + 所有新插入的行?
我可以使用return response()->json($header); 或return response()->json($header)->lines;,但这些选项都不会同时返回header 和lines。
【问题讨论】:
标签: php laravel-5 eloquent lumen