• 05-08-2020, 20:41:38
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba, laravelde başlangıç düzeyinde bi proje geliştiriyorun öğreniyorum. Bi sorunla karşılaştım. Herşeyi bitirdim ancak bu sorunu çözemedim. Makaleler tablosunda güncelleme yaptığım zaman "1452 Cannot add or update a child row: a foreign key constraint fails " hatası alıyorum.

    Migration:
    <?php
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    class Articles extends Migration
    {
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
    Schema::create('articles', function (Blueprint $table) {
    $table->id();
    $table->unsignedBiginteger('category_id');
    $table->string('title');
    $table->string('image');
    $table->longText('content');
    $table->integer('hit')->default(0);
    $table->string('slug');
    $table->string('seotitle');
    $table->string('seokeywords');
    $table->string('metadescription');
    $table->timestamps();
    $table->foreign('category_id')
    ->references('id')
    ->on('categories')
    ->onDelete('cascade');
    
    });
    }
    
    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
    Schema::dropIfExists('articles');
    }
    }
    Controllerdaki edit ve update fonksiyonu:

    public function edit($id)
    {
    $article=Article::findOrFail($id);
    $categories=Category::all();
    return view('back.articles.update',compact('categories','article'));
    }
    
    /**
    * Update the specified resource in storage.
    *
    * @param \Illuminate\Http\Request $request
    * @param int $id
    * @return \Illuminate\Http\Response
    */
    public function update(Request $request, $id)
    {
    $request->validate([
    'title'=>'min:3',
    'image'=>'image|mimes:jpeg,png,jpg|max:2048'
    ]);
    $article= Article::findOrFail($id);
    $article->title=$request->title;
    $article->category_id=$request->category;
    $article->content=$request->content;
    $article->slug=Str::slug($request->title);
    
    if($request->hasFile('image')){
    $imageName=Str::slug($request->title).'.'.$request->image->getClientOriginalExtension();
    $request->image->move(public_path('uploads'),$imageName);
    $article->image='uploads/'.$imageName;
    }
    $article->save();
    toastr()->success('Congratulations!', 'Your article has been successfully updated.');
    return redirect()->route('admin.articles.index');
    
        }
    2 Haftadır araştırıyorum ancak bir sonuca ulaşamadım. Phpmyadmin üzerinden çözebileceğim bir problem mi? Yardımcı olabilirseniz çok mutlu olurum
  • 05-08-2020, 20:47:04
    #2
    taneryeke adlı üyeden alıntı: mesajı görüntüle
    Merhaba, laravelde başlangıç düzeyinde bi proje geliştiriyorun öğreniyorum. Bi sorunla karşılaştım. Herşeyi bitirdim ancak bu sorunu çözemedim. Makaleler tablosunda güncelleme yaptığım zaman "1452 Cannot add or update a child row: a foreign key constraint fails " hatası alıyorum.

    Migration:
    <?php
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    class Articles extends Migration
    {
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
    Schema::create('articles', function (Blueprint $table) {
    $table->id();
    $table->unsignedBiginteger('category_id');
    $table->string('title');
    $table->string('image');
    $table->longText('content');
    $table->integer('hit')->default(0);
    $table->string('slug');
    $table->string('seotitle');
    $table->string('seokeywords');
    $table->string('metadescription');
    $table->timestamps();
    $table->foreign('category_id')
    ->references('id')
    ->on('categories')
    ->onDelete('cascade');
    
    });
    }
    
    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
    Schema::dropIfExists('articles');
    }
    }
    Controllerdaki edit ve update fonksiyonu:

    public function edit($id)
    {
    $article=Article::findOrFail($id);
    $categories=Category::all();
    return view('back.articles.update',compact('categories','article'));
    }
    
    /**
    * Update the specified resource in storage.
    *
    * @param \Illuminate\Http\Request $request
    * @param int $id
    * @return \Illuminate\Http\Response
    */
    public function update(Request $request, $id)
    {
    $request->validate([
    'title'=>'min:3',
    'image'=>'image|mimes:jpeg,png,jpg|max:2048'
    ]);
    $article= Article::findOrFail($id);
    $article->title=$request->title;
    $article->category_id=$request->category;
    $article->content=$request->content;
    $article->slug=Str::slug($request->title);
    
    if($request->hasFile('image')){
    $imageName=Str::slug($request->title).'.'.$request->image->getClientOriginalExtension();
    $request->image->move(public_path('uploads'),$imageName);
    $article->image='uploads/'.$imageName;
    }
    $article->save();
    toastr()->success('Congratulations!', 'Your article has been successfully updated.');
    return redirect()->route('admin.articles.index');
    
    }
    2 Haftadır araştırıyorum ancak bir sonuca ulaşamadım. Phpmyadmin üzerinden çözebileceğim bir problem mi? Yardımcı olabilirseniz çok mutlu olurum
    Konu hakkında bilgim yok fakat sizin için araştırayım dedim belki işinize yarar ;

    https://stackoverflow.com/questions/...nstraint-fails
  • 05-08-2020, 20:52:29
    #3
    dev
    Kurumsal Üye
    taneryeke adlı üyeden alıntı: mesajı görüntüle
    Merhaba, laravelde başlangıç düzeyinde bi proje geliştiriyorun öğreniyorum. Bi sorunla karşılaştım. Herşeyi bitirdim ancak bu sorunu çözemedim. Makaleler tablosunda güncelleme yaptığım zaman "1452 Cannot add or update a child row: a foreign key constraint fails " hatası alıyorum.

    Migration:
    <?php
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    class Articles extends Migration
    {
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
    Schema::create('articles', function (Blueprint $table) {
    $table->id();
    $table->unsignedBiginteger('category_id');
    $table->string('title');
    $table->string('image');
    $table->longText('content');
    $table->integer('hit')->default(0);
    $table->string('slug');
    $table->string('seotitle');
    $table->string('seokeywords');
    $table->string('metadescription');
    $table->timestamps();
    $table->foreign('category_id')
    ->references('id')
    ->on('categories')
    ->onDelete('cascade');
    
    });
    }
    
    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
    Schema::dropIfExists('articles');
    }
    }
    Controllerdaki edit ve update fonksiyonu:

    public function edit($id)
    {
    $article=Article::findOrFail($id);
    $categories=Category::all();
    return view('back.articles.update',compact('categories','article'));
    }
    
    /**
    * Update the specified resource in storage.
    *
    * @param \Illuminate\Http\Request $request
    * @param int $id
    * @return \Illuminate\Http\Response
    */
    public function update(Request $request, $id)
    {
    $request->validate([
    'title'=>'min:3',
    'image'=>'image|mimes:jpeg,png,jpg|max:2048'
    ]);
    $article= Article::findOrFail($id);
    $article->title=$request->title;
    $article->category_id=$request->category;
    $article->content=$request->content;
    $article->slug=Str::slug($request->title);
    
    if($request->hasFile('image')){
    $imageName=Str::slug($request->title).'.'.$request->image->getClientOriginalExtension();
    $request->image->move(public_path('uploads'),$imageName);
    $article->image='uploads/'.$imageName;
    }
    $article->save();
    toastr()->success('Congratulations!', 'Your article has been successfully updated.');
    return redirect()->route('admin.articles.index');
    
    }
    2 Haftadır araştırıyorum ancak bir sonuca ulaşamadım. Phpmyadmin üzerinden çözebileceğim bir problem mi? Yardımcı olabilirseniz çok mutlu olurum
    Article icin atamaya calistiginiz kategori id, categories tablosunda eklimi?

    Eger ogrenmeye yeni basliyorsaniz foreign kullanmayi ertelebiliirsiniz simdilik.
  • 05-08-2020, 21:22:38
    #4
    Noroc adlı üyeden alıntı: mesajı görüntüle
    Article icin atamaya calistiginiz kategori id, categories tablosunda eklimi?

    Eger ogrenmeye yeni basliyorsaniz foreign kullanmayi ertelebiliirsiniz simdilik.
    Evet categories tablosunda id var.


    iki tablo arasında şöyle bir ilişki var. Kategori id si ve articles tablosundaki category_id ile
  • 05-08-2020, 22:07:21
    #5
    Model tarafındaki bağlantıları yaptınız mı peki? Yani "Article" modeli içinde "category_id" ilişkisi için "categories" tablosunu tanıyacağını belirlediğiniz mi Türkçe tabirle anlatmak gerekirse...
  • 05-08-2020, 22:09:59
    #6
    Sinan Yorulmaz adlı üyeden alıntı: mesajı görüntüle
    Model tarafındaki bağlantıları yaptınız mı peki? Yani "Article" modeli içinde "category_id" ilişkisi için "categories" tablosunu tanıyacağını belirlediğiniz mi Türkçe tabirle anlatmak gerekirse...
    evet, Article model bu şekilde;
    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Article extends Model
    {
    function getCategory(){
    return $this->hasOne('App\Models\Category','id','category_id');
    }
    }
  • 05-08-2020, 22:18:44
    #7
    taneryeke adlı üyeden alıntı: mesajı görüntüle
    evet, Article model bu şekilde;
    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Article extends Model
    {
    function getCategory(){
    return $this->hasOne('App\Models\Category','id','category_id');
    }
    }
    Anladım, sorunun çözümü için daha genel olarak bakmak gerekiyor kodlarınıza. Eğer online bir ortamda görebilirsek daha sağlıklı yardımcı olmaya çalışırım. Fakat bu tarz olaylarda nacizane önerim, kategorileme için pivot tablolar kullanmanız. Eğer bilginiz yoksa Laravel'in dokümantasyonunda pivot tablolar kullanarak nasıl kategorizasyon yapacağınız detaylı olarak anlatılıyor.
  • 05-08-2020, 22:21:14
    #8
    Sinan Yorulmaz adlı üyeden alıntı: mesajı görüntüle
    Anladım, sorunun çözümü için daha genel olarak bakmak gerekiyor kodlarınıza. Eğer online bir ortamda görebilirsek daha sağlıklı yardımcı olmaya çalışırım. Fakat bu tarz olaylarda nacizane önerim, kategorileme için pivot tablolar kullanmanız. Eğer bilginiz yoksa Laravel'in dokümantasyonunda pivot tablolar kullanarak nasıl kategorizasyon yapacağınız detaylı olarak anlatılıyor.
    Teşekkür ederim, inceliyeyim
  • 06-08-2020, 14:21:27
    #9
    dd($request->category);
    yaparak oraya doğru category id geldiğini ve integer olup olmadığını teyit eder misin?
    front end kodlarını görmediğim için buraya ne yollandığını bi kontrol etmek lazım.

    hatta validasyonada

    'category'=>'exists|integer|exists:categories,id'
    ekleyebilirsin.