Return 来自 eloquent 的 saveMany 以及 parent 数据
Return result from eloquent's saveMany in addition to parent data
在我使用 Eloquent
的方法 saveMany
将数据保存到数据库后 - 我想 return parent data
和 child data
合而为一 JSON
块。问题是在我当前的实现中,我可以 return 一个或另一个,但不能两者兼而有之。最合适、最干净的方法是什么?
我有 2 个模型:
Theader
(即Header)
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
table。生成唯一 id
。
- 2 到 100 行将转到
lines
table。都一样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 header 一次性添加所有新插入的行?
我可以使用 return response()->json($header);
或 return response()->json($header)->lines;
,但这些选项 return 都不能同时使用 header
和 lines
。
你可以return两行都这样
return response()->json(compact('headers', 'lines'));
将所有内容都放在一个对象中
$headers->lines = $lines;
$headers->moreStuff = $moreStuff;
return response()->json($headers);
您只需在保存数据后重新加载 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);
在我使用 Eloquent
的方法 saveMany
将数据保存到数据库后 - 我想 return parent data
和 child data
合而为一 JSON
块。问题是在我当前的实现中,我可以 return 一个或另一个,但不能两者兼而有之。最合适、最干净的方法是什么?
我有 2 个模型:
Theader
(即Header)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
table。生成唯一id
。 - 2 到 100 行将转到
lines
table。都一样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 header 一次性添加所有新插入的行?
我可以使用 return response()->json($header);
或 return response()->json($header)->lines;
,但这些选项 return 都不能同时使用 header
和 lines
。
你可以return两行都这样
return response()->json(compact('headers', 'lines'));
将所有内容都放在一个对象中
$headers->lines = $lines;
$headers->moreStuff = $moreStuff;
return response()->json($headers);
您只需在保存数据后重新加载 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);