【发布时间】:2018-02-23 11:56:43
【问题描述】:
我正在使用 Laravel 和 Ajax 开发一个网站。当我尝试使用 hasMany 方法返回属于特定用户(用户模型)的所有消息(消息模型)时遇到问题。
web.php
Route::get('/test', 'UserController@testFunction');
Route::post('/test', 'UserController@testFunction');
UserController.php
public function testFunction(Request $request) {
if ($request->isMethod('post')) {
$messages = User::find(1)->messages;
return $messages;
} else {
return 'get method';
}
}
用户模型
class User extends Authenticatable {
use Notifiable;
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
public function messages() {
$this->hasMany('App\Message', 'from');
}
}
消息模型
class Message extends Model {
protected $fillable = [
'from', 'to', 'content'];
}
然后我有两个按钮(仅用于测试 - POST 和 GET)。它们由这个 JavaScript 代码
处理window.onload = function() {
// AJAX Setup
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
// Post Method
$('#postMethod').click( function() {
$.post('test', function (data) {
console.log(data);
});
});
// Get Method
$('#getMethod').click(function() {
$.get('test', function(data) {
console.log(data);
});
});
}
数据库中的表结构如下:
当我点击 POST 按钮(由上面的 javascript 代码处理)时,我在控制台中收到此错误:error in console
如果我将$messages = User::find(1)->messages;更改为$messages = User::find(1)->name;,例如,我将ID为1的用户的名称正常返回到控制台。
我认为 UserController.php 中的 messages() 函数有问题。也许'来自'作为外键?这只是我的猜测,可能错误出在其他地方,请自行查看。
【问题讨论】:
-
我猜你也必须将令牌作为参数传递
-
你的意思是
<meta name="csrf-token" content="{{ csrf_token() }}">?我在 app.blade.php 模板的 head 标签中有它。 -
查看网络选项卡以获取更多信息或查看 laravel.log 文件以获取有关错误的更多信息
-
不,不是在标题中,而是在这样的正文中,数据:{ _token: $('#signup-token').val()} ...
-
是的,正如@linktoahref 所说,检查日志以获取更多信息
标签: javascript php laravel