2015-03-30 30 views
12

Tôi cố gắng để có được dữ liệu cụ thể từ cơ sở dữ liệu bằng cách sử dụng cột SongID khi người dùng nhấp vào một liên kết nhưng tôi nhận được lỗi này:SQLSTATE [42S22]: Cột không tìm thấy: 1054 Unknown cột 'id' trong 'mệnh đề where' (SQL: select * từ `songs` nơi 'id` = 5 giới hạn 1)

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select * from songs where id = 5 limit 1)

Controller class:

<?php namespace App\Http\Controllers; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 

use Illuminate\Http\Request; 
use DB; 

class SongsController extends Controller { 

    public function index() 
    { 

     $name = $this->getName(); 
     $songs = DB::table('songs')->get(); 

     return view('songs.index', compact('songs','name')); 
    } 

    public function show($id) 
    { 
     $name = $this->getName(); 
     $song = DB::table('songs')->find($id); 

     return view('songs.show', compact('song','name')); 
    } 

    private function getName() 
    { 
     $name = 'Tupac Amaru Shakur'; 

     return $name; 
    } 
} 

Migration:

public function up() 
    { 
      Schema::create('songs', function($table) 
      { 
       $table->increments('SongID'); 
       $table->string('SongTitle')->index(); 
       $table->string('Lyrics')->nullable(); 
       $table->timestamp('created_at'); 
      }); 
    } 
+0

như thế nào schema bảng của bạn trông như thế nào? Rõ ràng, bạn dường như thiếu một 'cột id' trong bảng của bạn vì một lý do .... – silkfire

+0

Tôi không có một cột gọi là id trong bảng của tôi, thay vào đó tôi có SongID – Tartar

Trả lời

37

Khi bạn sử dụng find(), nó tự động giả định cột khóa chính của bạn sẽ là id. Để điều này hoạt động chính xác, bạn nên đặt khóa chính trong mô hình của mình.

Vì vậy, trong Song.php, trong lớp, thêm dòng ...

protected $primaryKey = 'SongID'; 

Nếu có bất kỳ khả năng thay đổi sơ đồ của bạn, tôi muốn khuyên bạn nên đặt tên cho tất cả các bạn cột khóa chính id, đó là những gì Laravel giả định và có lẽ sẽ giúp bạn tránh được nhiều đau đầu hơn trên đường.

+0

cảm ơn người đàn ông !!!!!!! tôi có nhiều vấn đề ♥ –

3
$song = DB::table('songs')->find($id); 

đây bạn sử dụng phương pháp find($id)

cho Laravel, nếu bạn sử dụng phương pháp này, bạn nên có cột có tên 'id' và thiết lập nó như là khóa chính, như vậy thì bạn sẽ có thể sử dụng phương pháp find()

nếu không sử dụng where('SongID', $id) thay vì find($id)

+0

@CJ Đình chỉ tuyên bố này trả về không có gì từ cơ sở dữ liệu. – Tartar

+1

'$ hát = DB :: bảng ('ca khúc') -> nơi ('SongID', $ id) -> đầu tiên()' Điều đó sẽ trả về một mô hình (miễn là có cái gì đó trong cơ sở dữ liệu của bạn với id đó) . Sau đó, bạn sẽ có thể để có được tài sản đó với '$ song-> SongTitle' – user3158900

0

bảo vệ $ PrimaryKey = 'SongID'; sau khi thêm vào mô hình của tôi nói với khóa chính coz nó đã được dùng theo mặc định id

Các vấn đề liên quan