在Laravel中从JavaScript调用模型函数

时间:2015-03-11 20:18:35

标签: javascript php laravel-4 eloquent blade

我实际上遇到了当前项目的小问题。以下案例:

我有一个名为“发布”的模型与关系:

public function subscribers(){
    return $this->belongsToMany('User');    
}

在我的视图文件中,有一个包含所有Postings的表,还有一个用于订阅/取消订阅的复选框,其中匹配值为posts-id:

<input class="click" type="checkbox" name="mobileos" value="{{{$posting->id}}}"
     @if($posting->subscribers->find(Auth::User()->id)) 
         checked="checked"
     @endif
>

现在我要归档的东西:

JavaScript会检查是否选中了复选框。据此,当前用户订阅/取消订阅发布。类似的东西:

        $('.click').on('click',function() {

            // $posting->find(---$(this).prop('checked')---)->subscribers()->attach(---Auth::user()->id---);
            // $posting->find(---$(this).prop('checked')---)->subscribers()->detach(---Auth::user()->id---);
        });

是否有可能实现这种或任何其他方式?到目前为止,我无法理解这一点。

干杯, 克里斯

1 个答案:

答案 0 :(得分:1)

如果您想使用Ajax来实现这一目标,您需要在Laravel中为订阅提供一个REST端点,例如:

http://localhost/subscribe/{{userid}}

调用此Endpoint时,可以更新数据库。如果数据库中的保存数据库成功,该函数也可以返回显示的JSON。

使用此端点点击进行Ajax调用:

var user = {
   id: 0 // retrieve the correct ID from wherever it is stored
}

$('.click').on('click',function() {

  $.GET('http://localhost/subscribe/' + user.id, 
  function () { // this is the success callback, that is called, if the Ajax GET did not return any errors
    alert('You are subsribed')
  });

});

理想情况下,您不会使用GET方法,而是使用POST 并将用户ID作为数据发送。此外,您还需要从会话或存储的任何位置检索用户ID。

请注意,当您使用Ajax时,可以轻松地从客户端进行操作。因此,如果发送的用户ID与会话中的用户ID相同,则应在服务器上进行检查。也许您根本不需要发送用户ID,但这取决于您的后端是如何构建的。