خطأ في Eloquent ORM في laravel 4
سؤال
أنا أتعلم حاليًا Laravel وأحاول اتباع هذا البرنامج التعليمي.لكنني أستخدم laravel 4 والبرنامج التعليمي يستخدم laravel 3، لذا يجب أن أصلح العديد من الأشياء بسبب ذلك.لدي هذه الطريقة على وحدة تحكم
public function InsertTestData()
{
$logged_in_user = Auth::user();
$photos = array(
array(
'user_id' => $logged_in_user->id,
'location' => 'http://farm6.staticflickr.com/5044/5319042359_68fb1f91b4.jpg',
'description' => 'Dusty Memories, The Girl in the Black Beret (http://www.flickr.com/photos/cloudy-day/)'
),
array(
'user_id' => $logged_in_user->id,
'location' => 'http://farm3.staticflickr.com/2354/2180198946_a7889e3d5c.jpg',
'description' => 'Rascals, Tannenberg (http://www.flickr.com/photos/tannenberg/)'
),
array(
'user_id' => $logged_in_user->id,
'location' => 'http://farm7.staticflickr.com/6139/5922361568_85628771cd.jpg',
'description' => 'Sunset, Funset, Nikko Bautista (http://www.flickr.com/photos/nikkobautista/)'
)
);
$logged_in_user->photos()->save($photos);
}
وهذا هو النموذج الذي استخدمته
class User extends Eloquent implements UserInterface, RemindableInterface {
public function photos()
{
return $this->hasMany('Photo');
}
}
فإنه يعيد الخطأ مثل هذا
Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, array given, called in /Library/WebServer/Documents/webpraktek/app/controllers/DashboardController.php on line 44 and defined
السطر 44 هو هذا السطر
$logged_in_user->photos()->save($photos);
هذا نموذج لصورة الفصل
class Photo extends Eloquent
{
public function user()
{
return $this->belongsTo('User');
}
public function photocomments()
{
return $this->hasMany('PhotoComment');
}
}
لا أعرف أي شيء لإصلاح هذه المشكلة، لأنني مازلت أتعلم.لماذا يحدث هذا؟هل الاختلاف في إصدار Laravel يسبب هذا النوع من الأخطاء؟شكرًا
يحرر:لقد أصلحته مع هذا في الوقت الحالي،
foreach($photos as $photo) {
$photos = new Photo();
$photos->user_id = $photo['user_id'];
$photos->location = $photo['location'];
$photos->description = $photo['description'];
$photos->save();
}
المحلول
بقدر ما أستطيع أن أقول، لا يعمل مثالك لأنك لا تنشئ نموذج صور جديد.
حاول استبدال هذا:
giveacodicetagpre.مع:
giveacodicetagpre.نصائح أخرى
لا تحتاج إلى استخدام $logged_in_user
للربط لأن لديك بالفعل المعرفات المحددة في المصفوفة، لذا استخدم فقط create
بدلاً من.
Photo::create($photos);
لا تنتمي إلى StackOverflow