๋ค์๊ณผ ๊ฐ์ ์ฝ 30,000 ๊ฐ ๋ ์ฝ๋์ Question
๋ชจ๋ธ์ด ์์ต๋๋ค.
class Question extends Model
{
use SoftDeletes;
protected $primaryKey = 'question_id';
protected $fillable = ['text', 'code', 'cat', 'answer', 'confirmed', 'is_private', 'email', 'parent', 'expert'];
public function sub_questions ()
{
return $this->hasMany(Question::class, 'parent', 'question_id');
}
public function latest_sub_question ()
{
return $this->hasOne(Question::class, 'parent', 'question_id')->latest();
}
}
๋ชจ๋ ์ง๋ฌธ ๋ชฉ๋ก์ ํ์ํ๊ธฐ ์ํด yajra datatable laravel ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ๋ด js ์ฝ๋์ ๋๋ค.
var allQuestionsTable =
$('#allQuestionsTable').DataTable({
processing: true,
serverSide: true,
"bSort": false,
"responsive": true,
ajax: {
url: '{!! route('admin.questionsDatatable') !!}'
},
columns: [
{data: 'checkbox'},
{data: 'code', name: 'code'},
{data: 'text', name: 'text'},
{data: 'created_at'},
{data: 'answer', name: 'answer'},
{data: 'expert'},
{data: 'confirmed'},
{data: 'actions'}
]
});
๊ทธ๋ฆฌ๊ณ ๋ฐฑ์๋์์์ด ํจ์๋ฅผ ์์ฑํ์ต๋๋ค.
public function questionsDatatable (Request $request)
{
$questions = Question::with('latest_sub_question')->whereNull('parent');
$datatable = app('datatables')->of($questions)
->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$question_id}}" id="Check_{{$question_id}}">');
//other column modifications comes here
return $datatable->make(true);
}
๋จผ์ ๋ด ํ
์ด๋ธ์ ๋ช ๊ฐ์ ํ์ด์์ ๋ ๋ชจ๋ ๊ฒ์ด ์ ์๋ํ์ง๋ง ๋ง์ ์์ ์ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด questionsDatatable
๋น ๊ฐ์ ๋ฐํํ๊ณ ๋ฐ์ดํฐ ํ
์ด๋ธ์ด ๊ฒฝ๊ณ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฌด์์ด ๋ฌธ์ ์ ๋๊น? ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ฌ์ฉํ ์์๋ ๋งค๊ฐ ๋ณ์๊ฐ ์์ต๋๊น?
ajax ์์ฒญ์ ์กฐ์ฌํด ๋ณด์ จ์ต๋๊น? ๋ฌธ์ ์ ์์ธ์ ๋ํ ์ค๋ฅ ๋คํ๋ฅผ ์ ๊ณตํด์ผํฉ๋๋ค.
@yajra , ์,ํ์ง๋ง ๋น ์๋ต๊ณผ 500 Internal Server Error
์ํ ์ฝ๋๊ฐ ๋ฐํ๋์์ต๋๋ค.
๋ฌผ๋ก ์ง๋ฌธ ๊ฐ์ ธ ์ค๊ธฐ ์ฌ์ด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณตํ๊ธฐ ์ํด app('datatables')
ํธ์ถํ๊ธฐ ์ ์ get()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ค์ $questions
์ each()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. ์ฌ์ค ๋ด ๋ฐฑ์๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public function questionsDatatable (Request $request)
{
$questions = Question::with('latest_sub_question')->whereNull('parent');
$questions = $questions->get();
$questions = $questions->map(function ($item, $key) {
return is_null($item->latest_sub_question) ? $item : $item->latest_sub_question;
});
$questions->sortByDesc('created_at');
$datatable = app('datatables')->of($questions)
->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$question_id}}" id="Check_{{$question_id}}">');
//other column modifications comes here
return $datatable->make(true);
}
๊ทธ๊ฒ์ด ์ค๋ฅ์ ์์ธ์ธ์ง ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๊น?
๋น์ ์ ํ์คํ ๋น์ ์ ์์์ ๋ง์ด ์๋ชจ ํ ๋น์ ์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ๋ก๋ํ๊ณ ์์ต๋๋ค. get
์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋์ ๊ฐ์ด ์๋ํด๋ณด์ญ์์ค.
public function questionsDatatable (Request $request)
{
$questions = Question::with('latest_sub_question')->whereNull('parent');
$datatable = app('datatables')->of($questions)
->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$question_id}}" id="Check_{{$question_id}}">');
->editColumn('latest_sub_question', function($item) {
return is_null($item->latest_sub_question) ? $item : $item->latest_sub_question;
})
//other column modifications comes here
return $datatable->make(true);
}
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋น์ ์ ํ์คํ ๋น์ ์ ์์์ ๋ง์ด ์๋ชจ ํ ๋น์ ์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ๋ก๋ํ๊ณ ์์ต๋๋ค.
get
์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋์ ๊ฐ์ด ์๋ํด๋ณด์ญ์์ค.