我研究了Laravel Intermediate Task tutorial,现在我想根据它创建一个更复杂的应用程序。
我正在创建一个日常日志应用来研究模型依赖项。我有三个模型:User
,DayLog
和Task
。
User
有很多DayLog
s。DayLog
s 可以有多个Tasks
(可选)。 User
和DayLog
的关系和CRUD工作正常,直接从教程中解除。现在我要保存一个DayLog
Task
,但我很难实现。{/ p>
以下是我的模型,表明之前讨论的关系:
// User.php
public function dayLogs()
{
return $this->hasMany(DayLog::class);
}
// DayLog.php
public function user()
{
return $this->belongsTo(User::class);
}
public function task()
{
return $this->hasMany(Task::class);
}
// Task.php
public function dayLog()
{
return $this->belongsTo(DayLog::class);
}
目前我正在后端开发。我正在尝试将Task
与正在保存的DayLog
相关联:
// DayLogController.php
public function create(Request $request)
{
$this->validate($request, [
'daylog_name' => 'required|max:255',
]);
// Create dummy Task
$task = new Task();
$task->name = "My new task ".date('Ymd');
// Save Task to the current DayLog - NOK
$request->daylog()->tasks()->create([
'task_name' => $task->name,
]);
// Save DayLog to User - OK
$request->user()->daylogs()->create([
'name' => $request->daylog_name,
]);
return redirect('/daylogs');
}
这显示错误:
Macroable.php第74行中的BadMethodCallException:
方法daylog不存在。
我不明白为什么user()
位于$request
,而daylog()
不是。{/ p>
基本上我想成功将内联Task
保存为上述方法中DayLog
的一部分。
使用本机Eloquent方法无法实现这一点,如果是,我应该查看查询构建器吗?如果没有,请与Eloquent分享如何实现这一目标。
我希望你能帮助我。
答案 0 :(得分:1)
您已将方法user()
,daylog()
,task()
添加到模型中,但是您尝试在Request $request
上使用它们。 $request
仅包含您从前端发送给他的数据,它与您的数据库无关。您应该在模型实体上使用这些方法,这些方法可以从现有($daylog = Daylog::where('name', $request->daylog_name)->first()
或新的$daylog = Daylog::create(['name' => $request->daylog_name])
)获得,然后您可以像$daylog->tasks()->create(['task_name' => 'My new task '.date('Ymd')])
和{{1 }。
方法$user->daylogs()->save($daylog)
适用于user()
的原因是您使用默认的laravel身份验证,这可以通过这种方式获取当前经过身份验证的用户,这样您就可以获得当前用户用户实体,如{{ 1}}。重要的是要了解您在$request
上使用的此方法$user = $request->user()
是默认的laravel方法,与您在user()
上使用的方法不同。
以下是您可能会发现有用的文档链接:
答案 1 :(得分:0)
更新belongsTo方法时,请使用associate()方法:
# coding: utf8
import csv
import twitter
CONSUMER_KEY = '...'
CONSUMER_SECRET = '...'
ACCESS_TOKEN = '...'
ACCESS_TOKEN_SECRET = '...'
api = twitter.Api(consumer_key=CONSUMER_KEY,
consumer_secret=CONSUMER_SECRET,
access_token_key=ACCESS_TOKEN,
access_token_secret=ACCESS_TOKEN_SECRET)
users = api.GetSearch(term=" ",lang="fr",count=200)
print users