Laravel Ajax 获取一对多关系的数据
Laravel Ajax fetch data one to many relationship
我正在尝试通过 Ajax 调用从一对多关系中获取数据。
我的RestaurantOffer_tabletable:
id | restaurant_offer_id | tableName | fromNr | toNr
-----------------------------------------------------
1 | 1 | table1 | 1 | 4
-----------------------------------------------------
2 | 1 | table2 | 5 | 10
现在,我必须从这个 table 中获取这些数据。
型号RestaurantOffer.php
class RestaurantOffer extends Model
{
protected $guarded = [];
public function restaurant_offer_table()
{
return $this->hasMany(RestaurantOffer_table::class);
}
}
型号RestaurantOffer_table.php
class RestaurantOffer_table extends Model
{
protected $guarded = [];
public function restaurantoffer()
{
return $this->belongsTo(RestaurantOffer::class);
}
}
控制器RestaurantOffersController.php
function fetchdata(Request $request)
{
$id = $request->input('id');
$data = RestaurantOffer::find($id);
$output = array(
'monthlySum' => $data->monthlySum,
'userProfitPercentage' => $data->userProfitPercentage,
.......................
);
if($request->ajax()) {
echo json_encode($output);
}
}
在这个控制器中,我所有来自 RestaurantOffer 模型的数据也在获取,但是如何从 RestaurantOffer_table[=45 获取数据=] 模型在控制器中使用相同的功能。
查看Ajax函数:
$(document).on('click', '.edit', function(){
var id = $(this).attr("id");
var image_index= $(this).attr('data-index');
$('#form_output').html('');
$.ajax({
url: "{{route('restaurantOffers.fetchdata')}}",
method: 'get',
data: {id:id},
dataType: 'json',
success:function(data)
{
$('#getMonthlySum').val(data.monthlySum);
$('#userProfitPercentage').val(data.userProfitPercentage);
$.........
$('#contract_id').val(id);
$('#editContract').modal('show');
$('#action').val('Speichern');
$('.modal-title').text('Daten aktualisieren');
$('#button_action').val('update');
}
});
所以,问题是,如何通过 Ajax 调用从 RestaurantOffer_table 获取 RestaurantOffer 每一行的数据。例如
Restaurant 1 -> table1 | 1 | 4
table2 | 5 | 10
提前谢谢你。
您已在模型中定义关系。那挺好的。但是在控制器中获取时没有使用。
您在进行如下模型查询时在with()
方法中提到了关系函数
$data = RestaurantOffer::with('restaurant_offer_table')->where('id',$id)->first();
会调用laravel中的eagerloading方法。
但是你也可以在 elequent 查询之后使用那个关系方法。
$data = RestaurantOffer::find($id);
$data->restaurant_offer_table; // like this.
但是它不是预加载的,你不能在js文件中使用这个功能,所以你必须预加载数据。
我正在尝试通过 Ajax 调用从一对多关系中获取数据。
我的RestaurantOffer_tabletable:
id | restaurant_offer_id | tableName | fromNr | toNr
-----------------------------------------------------
1 | 1 | table1 | 1 | 4
-----------------------------------------------------
2 | 1 | table2 | 5 | 10
现在,我必须从这个 table 中获取这些数据。
型号RestaurantOffer.php
class RestaurantOffer extends Model
{
protected $guarded = [];
public function restaurant_offer_table()
{
return $this->hasMany(RestaurantOffer_table::class);
}
}
型号RestaurantOffer_table.php
class RestaurantOffer_table extends Model
{
protected $guarded = [];
public function restaurantoffer()
{
return $this->belongsTo(RestaurantOffer::class);
}
}
控制器RestaurantOffersController.php
function fetchdata(Request $request)
{
$id = $request->input('id');
$data = RestaurantOffer::find($id);
$output = array(
'monthlySum' => $data->monthlySum,
'userProfitPercentage' => $data->userProfitPercentage,
.......................
);
if($request->ajax()) {
echo json_encode($output);
}
}
在这个控制器中,我所有来自 RestaurantOffer 模型的数据也在获取,但是如何从 RestaurantOffer_table[=45 获取数据=] 模型在控制器中使用相同的功能。
查看Ajax函数:
$(document).on('click', '.edit', function(){
var id = $(this).attr("id");
var image_index= $(this).attr('data-index');
$('#form_output').html('');
$.ajax({
url: "{{route('restaurantOffers.fetchdata')}}",
method: 'get',
data: {id:id},
dataType: 'json',
success:function(data)
{
$('#getMonthlySum').val(data.monthlySum);
$('#userProfitPercentage').val(data.userProfitPercentage);
$.........
$('#contract_id').val(id);
$('#editContract').modal('show');
$('#action').val('Speichern');
$('.modal-title').text('Daten aktualisieren');
$('#button_action').val('update');
}
});
所以,问题是,如何通过 Ajax 调用从 RestaurantOffer_table 获取 RestaurantOffer 每一行的数据。例如
Restaurant 1 -> table1 | 1 | 4
table2 | 5 | 10
提前谢谢你。
您已在模型中定义关系。那挺好的。但是在控制器中获取时没有使用。
您在进行如下模型查询时在with()
方法中提到了关系函数
$data = RestaurantOffer::with('restaurant_offer_table')->where('id',$id)->first();
会调用laravel中的eagerloading方法。
但是你也可以在 elequent 查询之后使用那个关系方法。
$data = RestaurantOffer::find($id);
$data->restaurant_offer_table; // like this.
但是它不是预加载的,你不能在js文件中使用这个功能,所以你必须预加载数据。