这并没有引起任何问题,我只是对我遇到的一些行为完全感到困惑,所以希望您能提供一些见解。
在我的Laravel应用程序中,我点击一个API并像这样循环:
$response = Http::get('https://example.com/api');
$articles = $response->json();
foreach($articles as $article){
// do stuff
}
在循环中,我使用Eloquent模型将一些数据持久化到数据库中。让我完全困惑的是,如果这样做,它工作得很好:
$article_permalink = $article['permalink'];
$article_headline = $article['headline'];
$article = new Article;
$article->permalink = $article_permalink;
$article->headline = $article_headline;
$article->save();
然而,如果我只是从数组中直接赋值,它不工作,我收到下面的错误:
$article = new Article;
$article->permalink = $article['permalink'];
$article->headline = $article['headline'];
$article->save();
IlluminateDatabaseQueryException
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'permalink' cannot be null
我收到上述两个字段的错误。这些值绝对是在所有情况下定义的,只要在插入之前先将变量的数组版本赋值给标准变量,它就可以完美地工作。我还能错过什么呢?
感谢您正在覆盖$article
变量。所以当你分配你的模型属性$article
不再是一个数组,而是一个空的文章模型对象。
试试这个:
$articleModel = new Article;
$articleModel->permalink = $article['permalink'];
$articleModel->headline = $article['headline'];
$articleModel->save();
或者,将循环更改为:
foreach($articles as $articleArray){
$article = new Article;
$article->permalink = $articleArray['permalink'];
$article->headline = $articleArray['headline'];
$article->save();
}
在你的模型上:永久链接和标题应该是可填充的:
class Atricle extends Model
{
protected $fillable = [
'permalink',
'headline',
];
}