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文件中使用这个功能,所以你必须预加载数据。