使用Eloquent
方法saveMany
将数据保存到数据库后 - 我希望在parent data
中同时返回child data
和JSON
大块问题是,在我目前的实现中,我可以返回一个或另一个,但不能同时返回。什么是最合适和最干净的方法呢?
我有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');
}
}
当我插入新数据::
时theaders
表。生成唯一id
。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
。
答案 0 :(得分:1)
你可以像这样返回两行
return response()->json(compact('headers', 'lines'));
将所有内容都放在一个对象中
$headers->lines = $lines;
$headers->moreStuff = $moreStuff;
return response()->json($headers);
答案 1 :(得分:1)
您只需在保存数据后重新加载lines
关系。
这应该适合你:
// save your lines to your header
$header->lines()->saveMany($lines);
// load/reload the related lines on the $header object
$header->load('lines');
return response()->json($header);